From: Vladimir Petko Date: Wed, 22 Jul 2026 00:23:02 +0000 (+1200) Subject: Import openjdk-25_25.0.4+7-1.debian.tar.xz X-Git-Tag: archive/raspbian/25.0.5_7ea-1+rpi1~3^2~35^3 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=23c1224cdd0c811478812bbc64c6482f741272d3;p=openjdk-25.git Import openjdk-25_25.0.4+7-1.debian.tar.xz [dgit import tarball openjdk-25 25.0.4+7-1 openjdk-25_25.0.4+7-1.debian.tar.xz] --- 23c1224cdd0c811478812bbc64c6482f741272d3 diff --git a/JAVA_HOME b/JAVA_HOME new file mode 100644 index 000000000..876e98953 --- /dev/null +++ b/JAVA_HOME @@ -0,0 +1,13 @@ + JAVA_HOME + +1. Legacy use of JAVA_HOME + + As of the latest versions of java-common there really should + be no need for JAVA_HOME as Java(TM) should be completely + integrated with your Debian GNU/Linux system. + + +2. Selecting OpenJDK 7 as the default Java(TM) implementation + + Please see README.alternatives for instructions on how + to make OpenJDK 7 executables and man pages the default on your system. diff --git a/JB-archive.applications.in b/JB-archive.applications.in new file mode 100644 index 000000000..7f20fd585 --- /dev/null +++ b/JB-archive.applications.in @@ -0,0 +1,6 @@ +java-archive + command=/usr/bin/java -jar + name=java-archive + can_open_multiple_files=false + requires_terminal=false + mime_types=application/java-archive,application/x-java-archive,application/x-jar diff --git a/JB-archive.keys.in b/JB-archive.keys.in new file mode 100644 index 000000000..743e3c8a2 --- /dev/null +++ b/JB-archive.keys.in @@ -0,0 +1,18 @@ +application/java-archive + description=Java Archive + icon_filename=@basename@ + default_action_type=application + default_application_id=java-archive + short_list_application_user_additions=java-archive +application/x-java-archive + description=Java Archive + icon_filename=@basename@ + default_action_type=application + default_application_id=java-archive + short_list_application_user_additions=java-archive +application/x-jar + description=Java Archive + icon_filename=@basename@ + default_action_type=application + default_application_id=java-archive + short_list_application_user_additions=java-archive diff --git a/JB-archive.mime.in b/JB-archive.mime.in new file mode 100644 index 000000000..e354ead53 --- /dev/null +++ b/JB-archive.mime.in @@ -0,0 +1,6 @@ +application/java-archive + ext: jar +application/x-java-archive + ext: jar +application/x-jar + ext: jar diff --git a/JB-dbg.overrides.in b/JB-dbg.overrides.in new file mode 100644 index 000000000..8ed6eb929 --- /dev/null +++ b/JB-dbg.overrides.in @@ -0,0 +1,8 @@ +# this are pre-stripped binaries (fastdebug) +@basename@-dbg binary: stripped-library +@basename@-dbg binary: debug-file-with-no-debug-symbols + +# these are java's .debuginfo files ... +@basename@-dbg binary: binary-with-bad-dynamic-table +@basename@-dbg binary: statically-linked-binary +@basename@-dbg binary: elf-error diff --git a/JB-demo.menu.in b/JB-demo.menu.in new file mode 100644 index 000000000..58aec29c3 --- /dev/null +++ b/JB-demo.menu.in @@ -0,0 +1,55 @@ +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ FileChooser Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/FileChooserDemo; /@basedir@/bin/java -jar FileChooserDemo.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" + +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ Font2DTest Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/Font2DTest; /@basedir@/bin/java -jar Font2DTest.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" + +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ Java 2D Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/Java2D; /@basedir@/bin/java -jar Java2Demo.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" + +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ SampleTree Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/SampleTree; /@basedir@/bin/java -jar SampleTree.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" + +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ Stylepad Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/Stylepad; /@basedir@/bin/java -jar Stylepad.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" + +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ SwingSet2 Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/SwingSet2; /@basedir@/bin/java -jar SwingSet2.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" + +?package(@basename@-demo):\ + needs="x11"\ + section="Applications/Programming"\ + title="@vendor@ Java @RELEASE@ TableExample Demo"\ + command="/bin/sh -c 'cd /@basedir@/demo/jfc/TableExample; /@basedir@/bin/java -jar TableExample.jar'"\ + icon="/usr/share/pixmaps/@basename@-app.xpm"\ + hints="Java2" diff --git a/JB-demo.overrides.in b/JB-demo.overrides.in new file mode 100644 index 000000000..1e1e36de5 --- /dev/null +++ b/JB-demo.overrides.in @@ -0,0 +1,14 @@ +# jpda/examples.jar only contains source code +@basename@-demo binary: codeless-jar usr/share/doc/openjdk-7-jre-headless/demo/jpda/examples.jar + +# OpenJDK is correct despite any Debian policy +@basename@-demo binary: unknown-java-class-version + +# example jar file with sources and documentation +@basename@-demo binary: codeless-jar + +# example jar file with sources +@basename@-demo binary: jar-contains-source + +# allow repeated path segments, e.g. nbproject +@basename@-demo binary: repeated-path-segment diff --git a/JB-doc.doc-base.in b/JB-doc.doc-base.in new file mode 100644 index 000000000..619d9ae5d --- /dev/null +++ b/JB-doc.doc-base.in @@ -0,0 +1,11 @@ +Document: @JDK@-doc +Title: @vendor@ Java(TM) @RELEASE@ JDK, Standard Edition Documentation +Author: @vendor@ +Abstract: The Java @RELEASE@ Platform Documentation contains API specifications, + feature descriptions, developer guides, reference pages for JDK tools + and utilities, demos, and links to related information. +Section: Programming + +Format: HTML +Index: /usr/share/doc/@basename@-jre-headless/api/index.html +Files: /usr/share/doc/@basename@-jre-headless/api/*/*.html diff --git a/JB-doc.overrides.in b/JB-doc.overrides.in new file mode 100644 index 000000000..a3d0df16d --- /dev/null +++ b/JB-doc.overrides.in @@ -0,0 +1,5 @@ +# Override due to upstream copyright +@basename@-doc binary: spelling-error-in-copyright "GNU Public License" "GNU General Public License" + +# override warning for the old mailing address in upstream copyright +@basename@-doc binary: old-fsf-address-in-copyright-file diff --git a/JB-fonts.defoma-hints.in b/JB-fonts.defoma-hints.in new file mode 100644 index 000000000..80212e25b --- /dev/null +++ b/JB-fonts.defoma-hints.in @@ -0,0 +1,187 @@ +category truetype + +# Sans + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaSansRegular.ttf + Family = LucidaSans + FontName = LucidaSans + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = SansSerif + Weight = Book + Width = Variable + Shape = NoSerif Upright + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaSansDemiBold.ttf + Family = LucidaSans + FontName = LucidaSans-Demibold + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = SansSerif + Weight = Bold + Width = Variable + Shape = NoSerif Upright + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaSansOblique.ttf + Family = LucidaSans + FontName = LucidaSans-Oblique + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = SansSerif + Weight = Thin + Width = Variable + Shape = NoSerif Oblique + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaSansDemiOblique.ttf + Family = LucidaSans + FontName = LucidaSans-Demibold-Oblique + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = SansSerif + Weight = Bold + Width = Variable + Shape = NoSerif Oblique + Foundry = Lucida + Priority = 15 +end + +# Serif + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaBrightRegular.ttf + Family = LucidaBright + FontName = LucidaBright-Regular + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Roman + Weight = Book + Width = Variable + Shape = NoSerif Upright + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaBrightItalic.ttf + Family = LucidaBright + FontName = LucidaBright-Italic + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Roman + Weight = Book + Width = Variable + Shape = NoSerif Oblique + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaBrightDemiBold.ttf + Family = Lucida-Bright + FontName = Lucida-Bright-Demi + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Roman + Weight = Bold + Width = Variable + Shape = NoSerif Upright + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaBrightDemiItalic.ttf + Family = Lucida-Bright + FontName = Lucida-Bright-DemiItalic + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Roman + Weight = Demi + Width = Variable + Shape = NoSerif Oblique + Foundry = Lucida + Priority = 15 +end + +# Mono + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaTypewriterRegular.ttf + Family = LucidaSans-Typewriter + FontName = LucidaSans-Typewriter + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Typewriter + Weight = Book + Width = Fixed + Shape = NoSerif Upright + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaTypewriterOblique.ttf + Family = LucidaSans-Typewriter + FontName = LucidaSans-Typewriter-Oblique + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Typewriter + Weight = Book + Width = Fixed + Shape = NoSerif Oblique + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaTypewriterBold.ttf + Family = LucidaSans-Typewriter + FontName = LucidaSans-Typewriter-Bold + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Typewriter + Weight = Bold + Width = Fixed + Shape = NoSerif Upright + Foundry = Lucida + Priority = 15 +end + +begin /usr/share/fonts/truetype/ttf-lucida/LucidaTypewriterBoldOblique.ttf + Family = LucidaSans-Typewriter + FontName = LucidaSans-Typewriter-Bold-Oblique + Encoding = Unicode + Location = English + Charset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 ISO10646-1 + UniCharset = ISO8859-1 ISO8859-2 ISO8859-7 ISO8859-9 ISO8859-15 + GeneralFamily = Typewriter + Weight = Bold + Width = Fixed + Shape = NoSerif Oblique + Foundry = Lucida + Priority = 15 +end diff --git a/JB-java.desktop.in b/JB-java.desktop.in new file mode 100644 index 000000000..eec5e5ca4 --- /dev/null +++ b/JB-java.desktop.in @@ -0,0 +1,12 @@ +[Desktop Entry] +Name=@vendor@ Java @RELEASE@ Runtime +Name[fi]=@vendor@ Java @RELEASE@ - ajonaikainen ympäristö +Comment=@vendor@ Java @RELEASE@ Runtime +Comment[fi]=@vendor@ Java @RELEASE@ - ajonaikainen ympäristö +Keywords=java;runtime +Exec=@java_launcher@ -jar +Terminal=false +Type=Application +Icon=@basename@ +MimeType=application/x-java-archive;application/java-archive;application/x-jar; +NoDisplay=true diff --git a/JB-jconsole.desktop.in b/JB-jconsole.desktop.in new file mode 100644 index 000000000..8a87820a2 --- /dev/null +++ b/JB-jconsole.desktop.in @@ -0,0 +1,11 @@ +[Desktop Entry] +Name=@vendor@ Java @RELEASE@ Console +Name[fi]=@vendor@ Java @RELEASE@ - konsoli +Comment=@vendor@ Java @RELEASE@ Monitoring & Management Console +Comment[fi]=@vendor@ Java @RELEASE@ - valvonta- ja hallintakonsoli +Keywords=java;console;monitoring +Exec=/usr/bin/jconsole +Terminal=false +Type=Application +Icon=@basename@ +Categories=Application;System; diff --git a/JB-jdk-headless.overrides.in b/JB-jdk-headless.overrides.in new file mode 100644 index 000000000..cb8adce21 --- /dev/null +++ b/JB-jdk-headless.overrides.in @@ -0,0 +1,2 @@ +# repeated lib due to upstream implementation directory layout +@basename@-jdk-headless binary: repeated-path-segment diff --git a/JB-jdk-headless.postinst.in b/JB-jdk-headless.postinst.in new file mode 100644 index 000000000..e3afef1f5 --- /dev/null +++ b/JB-jdk-headless.postinst.in @@ -0,0 +1,76 @@ +#!/bin/sh + +set -e + +multiarch=@multiarch@ +priority=@priority@ +basedir=/@basedir@ +mandir=$basedir/man +jdiralias=@jdiralias@ +srcext=1.gz +dstext=1.gz +jdk_hl_tools='@jdk_hl_tools@' + +case "$1" in +configure) + # obsolete tool + if update-alternatives --list apt 2>/dev/null; then + update-alternatives --remove-all apt || true + fi + + if [ -z "$2" ]; then + update_alternatives=y + fi + if [ -n "$multiarch" ] && [ -n "$2" ]; then + for i in $jdk_hl_tools; do + if [ -z "$(update-alternatives --list $i 2>/dev/null | grep ^$basedir/)" ]; then + update_alternatives=y + break + fi + done + fi + if [ "$update_alternatives" != y ] && [ $priority -gt 1060 ]; then + for i in $jre_tools; do + oldp=$(update-alternatives --query java | awk -v b=$basedir '/^Alternative:/ && $2~b {p=1} /^Priority:/ && p {print $2; exit}') + if [ -n "$oldp" ] && [ "$oldp" -le 1060 ]; then + update_alternatives=y + break + fi + done + fi + + if [ "$update_alternatives" = y ]; then + if [ -n "$multiarch" ] && [ "$DPKG_MAINTSCRIPT_ARCH" != $(dpkg --print-architecture) ]; then + priority=$(expr $priority - 1) + fi + test -d /usr/share/man/man1 || mkdir -p /usr/share/man/man1 + for i in $jdk_hl_tools; do + unset slave1 slave2 || true + if [ -e $mandir/man1/$i.$srcext ]; then + slave1="--slave \ + /usr/share/man/man1/$i.$dstext \ + $i.$dstext \ + $mandir/man1/$i.$srcext" + fi + if false && [ -e $mandir/ja/man1/$i.$srcext ]; then + slave2="--slave \ + /usr/share/man/ja/man1/$i.$dstext \ + ${i}_ja.$dstext \ + $mandir/ja/man1/$i.$srcext" + fi + update-alternatives \ + --install \ + /usr/bin/$i \ + $i \ + $basedir/bin/$i \ + $priority \ + $slave1 $slave2 + done + fi # update alternatives + + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/JB-jdk-headless.preinst.in b/JB-jdk-headless.preinst.in new file mode 100644 index 000000000..01698fc26 --- /dev/null +++ b/JB-jdk-headless.preinst.in @@ -0,0 +1,23 @@ +#!/bin/sh + +set -e + +multiarch=@multiarch@ +old_basedir=/usr/lib/jvm/java-7-openjdk +jdk_hl_tools='apt extcheck idlj jar jarsigner javac javadoc javah javap jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd native2ascii rmic schemagen serialver wsgen wsimport xjc' + +case "$1" in + upgrade) + if [ -n "$multiarch" ] && [ -n "$2" ]; then + for i in $jdk_hl_tools; do + if [ -n "$(update-alternatives --list $i 2>/dev/null | grep ^$old_basedir/)" ]; then + update-alternatives --remove $i $old_basedir/bin/$i || true + fi + done + fi + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/JB-jdk-headless.prerm.in b/JB-jdk-headless.prerm.in new file mode 100644 index 000000000..80bf5030a --- /dev/null +++ b/JB-jdk-headless.prerm.in @@ -0,0 +1,15 @@ +#!/bin/sh -e + +set -e + +jdk_hl_tools='@jdk_hl_tools@' +basedir=/@basedir@ + + +if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then + for i in $jdk_hl_tools; do + update-alternatives --remove $i $basedir/bin/$i + done +fi + +#DEBHELPER# diff --git a/JB-jdk.menu.in b/JB-jdk.menu.in new file mode 100644 index 000000000..14f11ec2d --- /dev/null +++ b/JB-jdk.menu.in @@ -0,0 +1,7 @@ +?package(@basename@-jdk):\ + needs="x11"\ + section="Applications/System/Administration"\ + title="@vendor@ Java @RELEASE@ Console"\ + command="/usr/bin/jconsole"\ + icon="/usr/share/pixmaps/@basename@.xpm"\ + hints="Java2" diff --git a/JB-jdk.postinst.in b/JB-jdk.postinst.in new file mode 100644 index 000000000..bdffbe3cc --- /dev/null +++ b/JB-jdk.postinst.in @@ -0,0 +1,75 @@ +#!/bin/sh + +set -e + +multiarch=@multiarch@ +priority=@priority@ +basedir=/@basedir@ +mandir=$basedir/man +jdiralias=@jdiralias@ +srcext=1.gz +dstext=1.gz +jdk_tools='@jdk_tools@' + +case "$1" in +configure) + # obsolete tool + if update-alternatives --list apt 2>/dev/null; then + update-alternatives --remove-all apt || true + fi + + if [ -z "$2" ]; then + update_alternatives=y + fi + if [ -n "$multiarch" ] && [ -n "$2" ]; then + for i in $jdk_tools; do + if [ -z "$(update-alternatives --list $i 2>/dev/null | grep ^$basedir/)" ]; then + update_alternatives=y + break + fi + done + fi + if [ "$update_alternatives" != y ] && [ $priority -gt 1060 ]; then + for i in $jre_tools; do + oldp=$(update-alternatives --query java | awk -v b=$basedir '/^Alternative:/ && $2~b {p=1} /^Priority:/ && p {print $2; exit}') + if [ -n "$oldp" ] && [ "$oldp" -le 1060 ]; then + update_alternatives=y + break + fi + done + fi + + if [ "$update_alternatives" = y ]; then + if [ -n "$multiarch" ] && [ "$DPKG_MAINTSCRIPT_ARCH" != $(dpkg --print-architecture) ]; then + priority=$(expr $priority - 1) + fi + for i in $jdk_tools; do + unset slave1 slave2 || true + if [ -e $mandir/man1/$i.$srcext ]; then + slave1="--slave \ + /usr/share/man/man1/$i.$dstext \ + $i.$dstext \ + $mandir/man1/$i.$srcext" + fi + if false && [ -e $mandir/ja/man1/$i.$srcext ]; then + slave2="--slave \ + /usr/share/man/ja/man1/$i.$dstext \ + ${i}_ja.$dstext \ + $mandir/ja/man1/$i.$srcext" + fi + update-alternatives \ + --install \ + /usr/bin/$i \ + $i \ + $basedir/bin/$i \ + $priority \ + $slave1 $slave2 + done + fi # update alternatives + + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/JB-jdk.prerm.in b/JB-jdk.prerm.in new file mode 100644 index 000000000..f51219574 --- /dev/null +++ b/JB-jdk.prerm.in @@ -0,0 +1,15 @@ +#!/bin/sh -e + +set -e + +jdk_tools='@jdk_tools@' +basedir=/@basedir@ + + +if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then + for i in $jdk_tools; do + update-alternatives --remove $i $basedir/bin/$i + done +fi + +#DEBHELPER# diff --git a/JB-jre-headless.overrides.in b/JB-jre-headless.overrides.in new file mode 100644 index 000000000..c0c2ae7fa --- /dev/null +++ b/JB-jre-headless.overrides.in @@ -0,0 +1,22 @@ +# keep symbols so that native memory tracking works +# See https://bugs.launchpad.net/ubuntu/+source/openjdk-20/+bug/2012326 +@basename@-jre-headless binary: unstripped-binary-or-object + +# openjdk is installed under /usr/lib +@basename@-jre-headless binary: executable-in-usr-lib + +# Just an empty directory +@basename@-jre-headless binary: debug-suffix-not-dbg + +# Upstream implementation +@basename@-jre-headless binary: exit-in-shared-library +@basename@-jre-headless binary: spelling-error-in-binary + +# Override due to upstream copyright +@basename@-jre-headless binary: spelling-error-in-copyright "GNU Public License" "GNU General Public License" + +# repeated lib due to upstream implementation directory layout +@basename@-jre-headless binary: repeated-path-segment + +# override warning for the old mailing address in upstream copyright +@basename@-jre-headless binary: old-fsf-address-in-copyright-file diff --git a/JB-jre-headless.postinst.in b/JB-jre-headless.postinst.in new file mode 100644 index 000000000..b764c4742 --- /dev/null +++ b/JB-jre-headless.postinst.in @@ -0,0 +1,106 @@ +#!/bin/sh + +set -e + +multiarch=@multiarch@ +priority=@priority@ +basedir=/@basedir@ +mandir=$basedir/man +srcext=1.gz +dstext=1.gz +jre_tools='@jre_hl_tools@' + +case "$1" in +configure) + # fail early. java currently uses tricks to find its own shared + # libraries depending on the path of the binary. Will be changed + # in OpenJDK7 + if ! mountpoint -q /proc; then + echo >&2 "the java command requires a mounted proc fs (/proc)." + exit 1 + fi + + [ -d /etc/.java ] || mkdir -m 755 /etc/.java + [ -d /etc/.java/.systemPrefs ] || mkdir -m 755 /etc/.java/.systemPrefs + if [ ! -f /etc/.java/.systemPrefs/.system.lock ]; then + touch /etc/.java/.systemPrefs/.system.lock + chmod 644 /etc/.java/.systemPrefs/.system.lock + fi + if [ ! -f /etc/.java/.systemPrefs/.systemRootModFile ]; then + touch /etc/.java/.systemPrefs/.systemRootModFile + chmod 644 /etc/.java/.systemPrefs/.systemRootModFile + fi + + if [ -z "$2" ]; then + update_alternatives=y + fi + if [ -n "$multiarch" ] && [ -n "$2" ]; then + for i in $jre_tools; do + if [ -z "$(update-alternatives --list $i 2>/dev/null | grep ^$basedir/)" ]; then + update_alternatives=y + break + fi + done + fi + if [ "$update_alternatives" != y ] && [ $priority -gt 1060 ]; then + for i in $jre_tools; do + oldp=$(update-alternatives --query java | awk -v b=$basedir '/^Alternative:/ && $2~b {p=1} /^Priority:/ && p {print $2; exit}') + if [ -n "$oldp" ] && [ "$oldp" -le 1060 ]; then + update_alternatives=y + break + fi + done + fi + + if [ "$update_alternatives" = y ]; then + if [ -n "$multiarch" ] && [ "$DPKG_MAINTSCRIPT_ARCH" != $(dpkg --print-architecture) ]; then + priority=$(expr $priority - 1) + fi + for i in $jre_tools; do + unset slave1 slave2 || true + if [ -e $mandir/man1/$i.$srcext ]; then + slave1="--slave \ + /usr/share/man/man1/$i.$dstext \ + $i.$dstext \ + $mandir/man1/$i.$srcext" + fi + # disabled + if false && [ -e $mandir/ja/man1/$i.$srcext ]; then + slave2="--slave \ + /usr/share/man/ja/man1/$i.$dstext \ + ${i}_ja.$dstext \ + $mandir/ja/man1/$i.$srcext" + fi + update-alternatives \ + --install \ + /usr/bin/$i \ + $i \ + $basedir/bin/$i \ + $priority \ + $slave1 $slave2 + done + update-alternatives \ + --install /usr/bin/jexec jexec $basedir/lib/jexec $priority \ + --slave \ + /usr/share/binfmts/jar \ + jexec-binfmt \ + $basedir/lib/jar.binfmt + fi # update alternatives + + # register binfmt; ignore errors, the alternative may already be + # registered by another JRE. + if which update-binfmts >/dev/null && [ -r /usr/share/binfmts/jar ]; then + update-binfmts --package @basename@ --import jar || true + fi + + # Now that java is fully registered and configured, + # call update-ca-certificates-java + dpkg-trigger update-ca-certificates-java + + ;; + +esac + +#DEBHELPER# + +exit 0 diff --git a/JB-jre-headless.postrm.in b/JB-jre-headless.postrm.in new file mode 100644 index 000000000..e605e9633 --- /dev/null +++ b/JB-jre-headless.postrm.in @@ -0,0 +1,24 @@ +#!/bin/sh + +set -e + +basedir=/@basedir@ +multiarch=@multiarch@ +jdirname=@jdirname@ +etcdir=/@etcdir@ + +case "$1" in +purge) + if [ -z "$jdirname" ] || [ -z "$etcdir" ]; then + echo >&2 "$(basename $0): Internal error" + exit 1 + fi + rm -f $basedir/lib/*/classes.jsa + + # removals of config files in /etc is handled by dpkg + + # XXX should remove /etc/.java ??? + ;; +esac + +#DEBHELPER# diff --git a/JB-jre-headless.prerm.in b/JB-jre-headless.prerm.in new file mode 100644 index 000000000..89e7799d2 --- /dev/null +++ b/JB-jre-headless.prerm.in @@ -0,0 +1,24 @@ +#!/bin/sh + +set -e + +basedir=/@basedir@ +jre_tools='@jre_hl_tools@' + +if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then + for i in $jre_tools; do + update-alternatives --remove $i $basedir/bin/$i + done + + if which update-binfmts >/dev/null; then + # try to remove and ignore the error + if [ -e /var/lib/binfmts/@basename@ ]; then + update-binfmts --package @basename@ \ + --remove jar /usr/bin/jexec || true + fi + fi + + update-alternatives --remove jexec $basedir/lib/jexec +fi + +#DEBHELPER# diff --git a/JB-jre-zero.overrides.in b/JB-jre-zero.overrides.in new file mode 100644 index 000000000..1ff8c63c7 --- /dev/null +++ b/JB-jre-zero.overrides.in @@ -0,0 +1,10 @@ +# keep symbols so that native memory tracking works +# See https://bugs.launchpad.net/ubuntu/+source/openjdk-20/+bug/2012326 +@basename@-jre-zero binary: unstripped-binary-or-object + +# Upstream implementation +@basename@-jre-zero binary: exit-in-shared-library +@basename@-jre-zero binary: spelling-error-in-binary + +# repeated lib due to upstream implementation directory layout +@basename@-jre-zero binary: repeated-path-segment diff --git a/JB-jre.menu.in b/JB-jre.menu.in new file mode 100644 index 000000000..024b63fcf --- /dev/null +++ b/JB-jre.menu.in @@ -0,0 +1,7 @@ +?package(@basename@-jre):\ + needs="x11"\ + section="Applications/System/Administration"\ + title="@vendor@ Java @RELEASE@ Policy Tool"\ + command="/usr/bin/policytool"\ + icon="/usr/share/pixmaps/@basename@.xpm"\ + hints="Java2" diff --git a/JB-jre.overrides.in b/JB-jre.overrides.in new file mode 100644 index 000000000..3cc70870a --- /dev/null +++ b/JB-jre.overrides.in @@ -0,0 +1,9 @@ +# these are in the -jre-headless package, -jre depends on it +@basename@-jre binary: desktop-command-not-in-package + +# keep symbols so that native memory tracking works +# See https://bugs.launchpad.net/ubuntu/+source/openjdk-20/+bug/2012326 +@basename@-jre binary: unstripped-binary-or-object + +# repeated lib due to upstream implementation directory layout +@basename@-jre binary: repeated-path-segment diff --git a/JB-jre.postinst.in b/JB-jre.postinst.in new file mode 100644 index 000000000..84edc96f7 --- /dev/null +++ b/JB-jre.postinst.in @@ -0,0 +1,71 @@ +#!/bin/sh + +set -e + +multiarch=@multiarch@ +priority=@priority@ +basedir=/@basedir@ +mandir=$basedir/man +srcext=1.gz +dstext=1.gz +jre_tools='@jre_tools@' + +case "$1" in +configure) + if [ -z "$2" ]; then + update_alternatives=y + fi + if [ -n "$multiarch" ] && [ -n "$2" ]; then + for i in $jre_tools; do + if [ -z "$(update-alternatives --list $i 2>/dev/null | grep ^$basedir/)" ]; then + update_alternatives=y + break + fi + done + fi + if [ "$update_alternatives" != y ] && [ $priority -gt 1060 ]; then + for i in $jre_tools; do + oldp=$(update-alternatives --query java | awk -v b=$basedir '/^Alternative:/ && $2~b {p=1} /^Priority:/ && p {print $2; exit}') + if [ -n "$oldp" ] && [ "$oldp" -le 1060 ]; then + update_alternatives=y + break + fi + done + fi + + if [ "$update_alternatives" = y ]; then + if [ -n "$multiarch" ] && [ "$DPKG_MAINTSCRIPT_ARCH" != $(dpkg --print-architecture) ]; then + priority=$(expr $priority - 1) + fi + for i in $jre_tools; do + unset slave1 slave2 || true + if [ -e $mandir/man1/$i.$srcext ]; then + slave1="--slave \ + /usr/share/man/man1/$i.$dstext \ + $i.$dstext \ + $mandir/man1/$i.$srcext" + fi + # disabled + if false && [ -e $mandir/ja/man1/$i.$srcext ]; then + slave2="--slave \ + /usr/share/man/ja/man1/$i.$dstext \ + ${i}_ja.$dstext \ + $mandir/ja/man1/$i.$srcext" + fi + update-alternatives \ + --install \ + /usr/bin/$i \ + $i \ + $basedir/bin/$i \ + $priority \ + $slave1 $slave2 + done + fi # update alternatives + + ;; + +esac + +#DEBHELPER# + +exit 0 diff --git a/JB-jre.prerm.in b/JB-jre.prerm.in new file mode 100644 index 000000000..55cd79052 --- /dev/null +++ b/JB-jre.prerm.in @@ -0,0 +1,14 @@ +#!/bin/sh + +set -e + +basedir=/@basedir@ +jre_tools='@jre_tools@' + +if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then + for i in $jre_tools; do + update-alternatives --remove $i $basedir/bin/$i + done +fi + +#DEBHELPER# diff --git a/JB-source.overrides.in b/JB-source.overrides.in new file mode 100644 index 000000000..0fa2bd81a --- /dev/null +++ b/JB-source.overrides.in @@ -0,0 +1,2 @@ +# repeated lib due to upstream implementation directory layout +@basename@-source binary: repeated-path-segment diff --git a/JB-testsupport.overrides.in b/JB-testsupport.overrides.in new file mode 100644 index 000000000..a40a453d4 --- /dev/null +++ b/JB-testsupport.overrides.in @@ -0,0 +1,2 @@ +# servicability tests doing symbol lookups +@basename@-testsupport: unstripped-binary-or-object diff --git a/README.Debian b/README.Debian new file mode 100644 index 000000000..982cdaa73 --- /dev/null +++ b/README.Debian @@ -0,0 +1,48 @@ +openjdk-XX for Debian/Ubuntu +--------------------------- + +The OpenJDK build is configured --with-additional-vms to build with +different virtual machines. The hotspot implementation is available +for amd64 arm64 ppc64 ppc64el riscv64 s390x. +Other VM's: Zero, providing a byte code interpreter for every architecture. + +To use a different VM other than the default, use + + java -zero + +or for the java tools, use + + -J-zero. + +To change the default permanently, edit /etc/java-XX-openjdk/jvm-.cfg. + +The Zero VM can be found in the openjdk-XX-jre-zero package (on the +architectures where the Hotspot VM is available). + +Please look for further documentation in the directory +/usr/share/doc/openjdk-XX-jre/ . + + +Note for non-reparenting window manager users +--------------------------------------------- + +If you are using a non-reparenting window manager, such as ratpoison, awesome +or dwm, some Java graphical applications using the AWT toolkit will only +display empty grey windows, as described in but #508650. + +There are two solutions to work around this issue: +1. mask your window manager as one of the non-reparenting ones supported by AWT, + using the wmname tool from the + suckless-tools package: + $ wmname LG3D +2. set the environment variable _JAVA_AWT_WM_NONREPARENTING: + $ export _JAVA_AWT_WM_NONREPARENTING=true + +You can automate these tasks by writing them to your ~/.xsessionrc: +$ cat >> ~/.xsessionrc < Fri, 12 Dec 2025 11:29:28 +1300 + -- Matthias Klose Sun, 03 May 2009 13:58:10 +0200 + -- Torsten Werner Wed, 02 Apr 2008 11:46:53 +0200 diff --git a/README.alternatives.in b/README.alternatives.in new file mode 100644 index 000000000..19d46fb31 --- /dev/null +++ b/README.alternatives.in @@ -0,0 +1,35 @@ +Updating alternatives for JRE/JDK installations +----------------------------------------------- + +Packages providing a runtime or a development environment for the Java +language all use symlinks in the /etc/alternatives directory to enable +the system administrator to choose which programs to use for java, +javac, javah, etc. + +The update-java-alternatives script can be used to set all the JRE/JDK +alternatives: + +First, you have to decide which Java implementation to default to. + + update-java-alternatives --list + +tells about the available runtime and/or development environments. The +first column shows the names to be used in for the following examples. + +- Set all runtime tools to point to the alternatives: + + update-java-alternatives --jre --set + +- Set all runtime tools (headless only) to point to the + alternatives: + + update-java-alternatives --jre-headless --set + +- Set all runtime and development tools to point to the + alternatives: + + update-java-alternatives --set + +- Set all runtime and development tools to auto mode: + + update-java-alternatives --auto diff --git a/README.source b/README.source new file mode 100644 index 000000000..25e40b09e --- /dev/null +++ b/README.source @@ -0,0 +1,63 @@ +Content of source package +========================= +"openjdk-XX" is a composite source package: +- OpenJDK source tarball: + https://github/openjdk/jdku +- Google test source tarball + https://github.com/google/googletest +- Debian packaging scripts and patches. + +Building a new OpenJDK-XX Debian package +=================================================== + +1. Update version in d/changelog +2. Update git_tag variable in d/rules +3. Execute make -f debian/rules get-orig +3a. Use watch file (uscan or uscan --download-current-version) + as an alternative to generate the source tarball. +4. Validate the build by building the package, installing it + and building again against the newly build package. + +Switching between early access and release builds +=================================================== +1. Update version in d/changelog +2. Update is_upstream_release to 'yes' for release builds +3. Regenerate d/watch: + + make -f debian/rules debian/watch + + +Performing a backport +=================================================== +1. Update version in d/changelog. +2. Unpack source tarballs +2. Regenerate packaging files for the appropriate version in + a chroot, e.g., + + schroot -c trixie-amd64 + make -f debian/rules debian/control gen-autopkgtests + +3. Validate the build by building the package, installing it + and building again against the newly build package. + +Support for DEB_BUILD_OPTIONS +============================= +The current package's debian/rules support +the standardized environment variable DEB_BUILD_OPTIONS. This variable can +contain several flags to change how a package is compiled and built. + + * nocheck: don't run jtreg test suites. + * nodocs: skip javadoc generation + * nostrip: debugging symbols should not be stripped from the + binary during installation + * parallel=X: package should be built using up to X parallel processes + * nobootcycle: do not use OpenJDK bootcycle build, build the package + against boot OpenJDK + * noaltzero: don't build alternative Zero VM. + * terse: reduce build output. + +Sample usage: + + DEB_BUILD_OPTIONS="parallel=5 nocheck" dpkg-buildpackage -b" + + Build with 5 parallel processes and don't run jtreg test suites. diff --git a/README.testsuite b/README.testsuite new file mode 100644 index 000000000..2330ed4a1 --- /dev/null +++ b/README.testsuite @@ -0,0 +1,103 @@ +Running regression tests +------------------------ + +Unpack openjdk-N-source package and install the openjdk-N-testsupport +package. + +Change directory to the source package and execute: + + AUTOPKGTEST_TMP=. AUTOPKGTEST_ARTIFACTS=. \ + ./debian/tests/jtreg-autopkgtest.sh + +to run regression tests. + +The script does not set up a GUI environment. Please use +./debian/tests/jdk-autopkgtest.sh for JDK tests that require a GUI. + +Some examples: + +- Run specific tests: + + AUTOPKGTEST_TMP=. AUTOPKGTEST_ARTIFACTS=. \ + ./debian/tests/jtreg-autopkgtest.sh output-dir \ + -dir:test/hotspot/jtreg/ \ + sanity/BasicVMTest.java \ + runtime/6294277/SourceDebugExtension.java + +- Run a group of tests (see TEST.groups for definitions): + + AUTOPKGTEST_TMP=. AUTOPKGTEST_ARTIFACTS=. \ + ./debian/tests/jtreg-autopkgtest.sh output-dir \ + -dir:test/hotspot/jtreg \ + :tier1 + +- Run all tests in the subdirectory: + + AUTOPKGTEST_TMP=. AUTOPKGTEST_ARTIFACTS=. \ + ./debian/tests/jtreg-autopkgtest.sh output-dir \ + test/hotspot/jtreg/runtime + + or + + AUTOPKGTEST_TMP=. AUTOPKGTEST_ARTIFACTS=. \ + ./debian/tests/jtreg-autopkgtest.sh output-dir \ + -dir:test/hotspot/jtreg/ \ + runtime + +See the jtreg manual page for the overview of jtreg options. + +More information is available in OpenJDK documentation[1] and OpenJDK +developer guide[2]. + +Running hotspot regression tests +-------------------------------- + +Change directory to the source package and execute: + + AUTOPKGTEST_TMP=. AUTOPKGTEST_ARTIFACTS=. \ + ./debian/tests/hotspot-autopkgtest.sh + +Some examples: + +- Run specific tests: + + AUTOPKGTEST_TMP=. AUTOPKGTEST_ARTIFACTS=. \ + ./debian/tests/hotspot-autopkgtest.sh \ + sanity/BasicVMTest.java \ + runtime/6294277/SourceDebugExtension.java + +- Run a test group: + + AUTOPKGTEST_TMP=. AUTOPKGTEST_ARTIFACTS=. \ + ./debian/tests/hotspot-autopkgtest.sh \ + :tier2 + +Running the script without any options executes tier1 hotspot tests. + +Running jdk regression tests +---------------------------- + +Change directory to the source package and execute: + + AUTOPKGTEST_TMP=. AUTOPKGTEST_ARTIFACTS=. \ + ./debian/tests/jdk-autopkgtest.sh + +Some examples: + +- Run specific tests: + + AUTOPKGTEST_TMP=. AUTOPKGTEST_ARTIFACTS=. \ + ./debian/tests/jdk-autopkgtest.sh \ + java/lang/Long/GetLong.java \ + java/lang/Math/TanTests.java + +- Run a test group: + + AUTOPKGTEST_TMP=. AUTOPKGTEST_ARTIFACTS=. \ + ./debian/tests/jdk-autopkgtest.sh \ + :tier2 + +Running the script without any options executes tier1 jdk tests. + +[1] https://openjdk.org/groups/build/doc/testing.html +[2] https://openjdk.org/guide/#jtreg diff --git a/TODO b/TODO new file mode 100644 index 000000000..e131d33b8 --- /dev/null +++ b/TODO @@ -0,0 +1,10 @@ +to remove: +hotspot-set-compiler.diff +hotspot-warn-no-errformat.diff + +evaluate: +ld-symbolic-functions.diff still needed? +hotspot-sparc-arch.diff +pass-extra-flags.diff +hotspot-disable-werror.diff +hotspot-undefined-target-cpu.diff diff --git a/accessibility-atk.properties.disabled b/accessibility-atk.properties.disabled new file mode 100644 index 000000000..c1bdc487b --- /dev/null +++ b/accessibility-atk.properties.disabled @@ -0,0 +1,10 @@ +# +# The following line specifies the assistive technology classes +# that should be loaded into the Java VM when the AWT is initailized. +# Specify multiple classes by separating them with commas. +# Note: the line below cannot end the file (there must be at +# a minimum a blank line following it). +# +# Doesn't work, see LP: #935296 +#assistive_technologies=org.GNOME.Accessibility.AtkWrapper + diff --git a/accessibility-atk.properties.enabled b/accessibility-atk.properties.enabled new file mode 100644 index 000000000..b58c49249 --- /dev/null +++ b/accessibility-atk.properties.enabled @@ -0,0 +1,8 @@ +# +# The following line specifies the assistive technology classes +# that should be loaded into the Java VM when the AWT is initailized. +# Specify multiple classes by separating them with commas. +# Note: the line below cannot end the file (there must be at +# a minimum a blank line following it). +# +assistive_technologies=org.GNOME.Accessibility.AtkWrapper diff --git a/accessibility.properties b/accessibility.properties new file mode 100644 index 000000000..e0095896c --- /dev/null +++ b/accessibility.properties @@ -0,0 +1,9 @@ +# +# The following line specifies the assistive technology classes +# that should be loaded into the Java VM when the AWT is initialized. +# Specify multiple classes by separating them with commas. +# Note: the line below cannot end the file (there must be at +# a minimum a blank line following it). +# +assistive_technologies=org.GNOME.Accessibility.JavaBridge + diff --git a/apport-hook.py b/apport-hook.py new file mode 100644 index 000000000..16ff7ae74 --- /dev/null +++ b/apport-hook.py @@ -0,0 +1,46 @@ +'''Apport package hook for openjdk packages. + +Copyright (C) 2017 Canonical Ltd. +Author: Tiago Stürmer Daitx ''' + +import os +import re +import sys +from apport.hookutils import * + +def si_units(size): + for unit in ['KiB', 'MiB', 'GiB']: + size /= 1024 + if size < 1024: + break + return '{0:.1f} {1}'.format(size, unit) + +def add_info(report, ui=None): + attach_conffiles(report,'openjdk-25-jre-headless', ui=ui) + + if report['ProblemType'] == 'Crash' and 'ProcCwd' in report: + # attach hs_err_.pid file + cwd = report['ProcCwd'] + pid_line = re.search("Pid:\t(.*)\n", report["ProcStatus"]) + if pid_line: + pid = pid_line.groups()[0] + path = "%s/hs_err_pid%s.log" % (cwd, pid) + # make sure if exists + if os.path.exists(path): + content = read_file(path) + # truncate if bigger than 100 KB + # see LP: #1696814 + max_length = 100*1024 + if sys.getsizeof(content) < max_length: + report['HotspotError'] = content + report['Tags'] += ' openjdk-hs-err' + else: + report['HotspotError'] = content[:max_length] + \ + "\n[truncated by openjdk-25 apport hook]" + \ + "\n[max log size is %s, file size was %s]" % \ + (si_units(max_length), si_units(sys.getsizeof(content))) + report['Tags'] += ' openjdk-hs-err' + else: + report['HotspotError'] = "File not found: %s" % path + else: + report['HotspotError'] = "PID not found in ProcStatus entry." diff --git a/buildwatch.sh b/buildwatch.sh new file mode 100644 index 000000000..8521c4a60 --- /dev/null +++ b/buildwatch.sh @@ -0,0 +1,67 @@ +#! /bin/sh + +# +# Output something to stdout every so often so buildd won't kill +# the build when building +# + +builddir=$1 + +echo $$ > buildwatch.pid + +time_unit="m" +timer=0 +sleep_for=3 +time_up_at=180 +upd_every=30 # use a multiple of $sleep_for + +reset_timer() { timer=0; } +inc_timer() { timer=$(expr $timer + $sleep_for); } +time_up() { [ $timer -ge $time_up_at ]; } +can_update() { [ $(expr $timer % $upd_every) -eq 0 ]; } +do_sleep() { sleep ${sleep_for}${time_unit} && inc_timer; } + +is_running() { + ps x | grep -v grep | egrep -qs $@ + return $? +} + +cleanup() { + # find any hs_err_pid files generated during the build and print them out + # this helps debugging what went wrong during builds + find . -type f -name 'hs_err_pid*.log' -printf "[$0] === HOTSPOT ERROR LOG ===\n[$0] %p (last modification at %t)\n" -exec cat {} \; +} + +for sig in INT QUIT HUP TERM; do trap "cleanup; trap - $sig EXIT; kill -s $sig "'"$$"' "$sig"; done +trap cleanup EXIT + +while ! time_up; do + if [ ! -f buildwatch.pid ]; then + echo "[$0] pidfile removed" && break + fi + if ! is_running '/make'; then + echo "[$0] no make process detected (build done?)" && break + fi + + do_sleep + can_update || continue + + new_noisy=$(ls -l test/jtreg_output-* 2>&1 | md5sum) + new_quiet=$(ls -l $builddir/openjdk*/build/*/tmp/rt-orig.jar $builddir/openjdk*/build/*/lib/tools.jar $builddir/openjdk*/build/*/lib/ct.sym 2>&1 | md5sum) + if [ -n "$old_noisy" -a "$old_noisy" != "$new_noisy" ]; then + # jtreg updated test files, so it should be updating stdout in its own + # keep quiet and restart timer + reset_timer + elif [ -n "$old_quiet" -a "$old_quiet" != "$new_quiet" ]; then + reset_timer + echo "[$0] assembling jar file ..." + elif is_running '/cc1|jar|java|gij'; then + echo "[$0] compiler/java/jar running ..." + reset_timer + fi + old_noisy=$new_noisy + old_quiet=$new_quiet +done + +echo "[$0] exiting" +rm -f buildwatch.pid diff --git a/changelog b/changelog new file mode 100644 index 000000000..b6e1e45f6 --- /dev/null +++ b/changelog @@ -0,0 +1,6304 @@ +openjdk-25 (25.0.4+7-1) unstable; urgency=medium + + * OpenJDK 25.0.4 release, build 7. + - CVEs: + + CVE-2026-46968 + + CVE-2026-46917 + + CVE-2026-47010 + + CVE-2026-47021 + + CVE-2026-47027 + + CVE-2026-60147 + + CVE-2026-47059 + + CVE-2026-47063 + + CVE-2026-41254 + - Release notes: https://bit.ly/openjdk2504 + * d/{man, watch}: Regenerate. + + -- Vladimir Petko Wed, 22 Jul 2026 12:23:02 +1200 + +openjdk-25 (25.0.4~6ea-1) unstable; urgency=medium + + * OpenJDK 25.0.4 snapshot, build 6. + * d/t/problems.csv: Add openjdk-28, remove obsolete versions, + add new exclusions. + * d/p/jdk-8387580.diff: Apply upstream patch to resolve S390x + ftbfs (JDK-8387580). + * d/p/jdk-8377035.diff: Cherry-pick upstream patch to disable + failing JSR166 S390x tests (JDK-8377035). + * d/t/jdk-8388170-proposed.diff: Apply patch to resolve + deoptimization crash on S390x (JDK-8388170). + * Regenerate files. + + -- Vladimir Petko Thu, 16 Jul 2026 15:06:30 +1200 + +openjdk-25 (25.0.4~4ea-1) unstable; urgency=medium + + * OpenJDK 25.0.4 snapshot, build 4. + * d/rules: Do not perform copyright validation for old releases. + * d/rules: Check DEB_BUILD_PROFILES in addition to DEB_BUILD_OPTIONS + to set up with_check variable. Do not check control files if + with_check is disabled (Closes: #1137499). + * d/p/jdk-8385738.diff: Cherry-pick upstream patch to generate + reproducible javadoc snippet ids (JDK-8385738). + * d/p/jdk-8369817.diff: Drop patch applied upstream. + * d/control.in: Add myself to uploaders. + * Regenerate files. + + -- Vladimir Petko Mon, 08 Jun 2026 11:04:06 +1200 + +openjdk-25 (25.0.3+9-2) unstable; urgency=medium + + * d/rules: Strip man page formatting before comparing d/man and + generated content. + * d/man: Regenerate man pages. + + -- Vladimir Petko Sat, 25 Apr 2026 22:29:23 +1200 + +openjdk-25 (25.0.3+9-1) unstable; urgency=medium + + * OpenJDK 25.0.3 release, Build 9. + - CVEs: + + CVE-2026-22016: 8370529: Enhance Path Factories Redux + + CVE-2026-34282: 8374557: Enhance TLS connection handling + + CVE-2026-22021: 8371830: Enhance certificate chain validation + + CVE-2026-22013: 8370615: Improve Kerberos credentialing + + CVE-2026-23865: 8379158: Update FreeType to 2.14.2 + + CVE-2026-22008: 8367463: Improved Arena allocations + + CVE-2026-22018: 8370986: Enhance Zip file reading + + CVE-2026-22007: 8369575: Enhance crypto algorithm support + + CVE-2026-34268: 8371935: Enhance key generation + * d/rules: Check generated files only on amd64. This resolves riscv64 + ftbfs, as some architectures change with_check flag. + * Remove openjdk-25-jvmci-jdk binary package. + * d/t/problems.csv: Fix typo in loong64 excluded tests lists. + * Add common GPL and Apache license headers to copyright generator. + * d/copyright: Regenerate. + + -- Vladimir Petko Fri, 24 Apr 2026 11:53:29 +1200 + +openjdk-25 (25.0.3~8ea-2) unstable; urgency=medium + + * Ensure that all generated files are up to date: + - The copyright generator now checks if the current directory contains + an unpacked OpenJDK tree by verifying the presence of the + ASSEMBLY_EXCEPTION file. + - The copyright generator now drops common license text in-memory, + without running a shell script that modifies the source tree. + - d/rules: Add targets to generate all files and check that they match + the ones provided in the source package. + - d/rules: Add nogen DEB_BUILD_OPTION to disable file regeneration. + * d/rules: Use '-' instead of '~' in opt version string, swap package + version and distribution. + + -- Vladimir Petko Fri, 17 Apr 2026 09:59:57 +1200 + +openjdk-25 (25.0.3~8ea-1) unstable; urgency=medium + + * OpenJDK 25.0.3 snapshot, Build 8. + * d/p/jdk-8369817.diff: Apply upstream patch to resolve failing + EmptyPath test (JDK-8369817). + * d/p/jdk-8381555.diff: Apply upstream patch to disable G1 Compressed + Oops test on 32 bit architectures (JDK-8381555). + * d/t/problems.csv: Update problem list. + + -- Vladimir Petko Fri, 10 Apr 2026 19:30:54 +1200 + +openjdk-25 (25.0.3~7ea-2) unstable; urgency=medium + + * d/t/dependencies.sh: Regenerate. + + -- Vladimir Petko Mon, 30 Mar 2026 21:37:55 +1300 + +openjdk-25 (25.0.3~7ea-1) unstable; urgency=medium + + * OpenJDK 25.0.3 snapshot, Build 7. + + [ Vladimir Petko ] + * d/rules: Revert optional version string changes. + This should be resolved upstream. + + [ Matthias Klose ] + * d/t/jtreg-autopkgtest.in: Increase the timeout from 10 to 30 seconds + on loong64 (zero VM). + + -- Matthias Klose Sun, 29 Mar 2026 11:53:45 +0200 + +openjdk-25 (25.0.3~5ea-2) unstable; urgency=medium + + [ Vladimir Petko ] + * d/rules: Remove '[' separator in version string, it makes the version + string invalid. + * d/t/dependencies.{in,sh}: Relax test assertion and regenerate. + + [ Matthias Klose ] + * Regenerate test scripts. Closes: #1127309. + * Move pandoc and graphviz to general build dependencies, needed for + man page generation. + * Use pre-generated man pages on architectures where pandoc is not + available. Closes: #1128485. + + -- Matthias Klose Sat, 14 Mar 2026 14:57:57 +0100 + +openjdk-25 (25.0.3~5ea-1) unstable; urgency=medium + + * OpenJDK 25.0.3 snapshot, Build 5. + + [ Miao Wang ] + * d/t/problems.csv: Add tests which take too long to finish on + loong64. + + [ Vladimir Petko ] + * d/rules: Separate package version in version string. + * d/dbg.py: Fix syntax errors in gdb unwinder, do not install unwinder + for zero, install hotspot unwinder in the correct directory. + * d/t/jtreg-autopkgtest.{in,sh}: Do not force agentvm for s390x jtreg + tests to resolve the build crash on Launchpad. + Disable debug traces. Load unwinder in the disabled state. + Return iterator rather than list from OpenJDKFrameFilter.flatten(). + Remove unused code from NativeMethodInfo. + + [ Matthias Klose ] + * Refresh patches. + + -- Matthias Klose Fri, 06 Mar 2026 10:18:55 +0100 + +openjdk-25 (25.0.2+10-1) unstable; urgency=medium + + * OpenJDK 25.0.2 release, build 10. + - CVEs: + + CVE-2026-21945: 8368032: Enhance Certificate Checking. + + CVE-2026-21932: 8359501: Enhance Handling of URIs. + + CVE-2026-21933: 8362632: Improve HttpServer Request handling. + + CVE-2026-21925: 8341496: Improve JMX connections. + * d/rules: Use jtreg8 package for the tests. + * d/p/power-opt.diff: Refresh patch. + * Drop patches applied upstream: + - d/p/jdk-8359735.patch. + - d/p/jdk-8369450-proposed.patch. + - d/p/jdk-8370049-proposed.patch. + + -- Vladimir Petko Thu, 22 Jan 2026 10:10:25 +1300 + +openjdk-25 (25.0.1+8-3) unstable; urgency=medium + + * d/t/control.in: Remove flaky and skippable flag from dependencies.sh + test and install only jre package. + * d/t/control: Regenerate. + + -- Vladimir Petko Mon, 12 Jan 2026 14:40:31 +1300 + +openjdk-25 (25.0.1+8-2) unstable; urgency=medium + + [ Matthias Klose ] + * d/rules: Adjust any_archs, hppa is unlikely to get fixed for the + opposite stack frame growth. + * d/rules: Run the testsuite for loong64. + * Regenerate the watch file. + + [ Vladimir Petko ] + * d/{rules/control.in/test/control.in}: Replace dbus-x11 with dbus- + daemon dependency. Closes: #1117100. + * d/control: d/test/control: Regenerate. + * d/README.{Debian,source}: Update package readme files. + * d/rules: Use generic code to replace bundled jquery. + * d/JB-doc.overrides.in: Drop binary package bundled jquery + override. The override is not needed for the binary package. + * d/s/lintian-overrides: Update jquery override override comment. + * Update unstripped-binary-or-object override comments. + OpenJDK needs symbols for Native Memory Tracking. + + -- Vladimir Petko Sat, 20 Dec 2025 09:57:54 +1300 + +openjdk-25 (25.0.1+8-1) unstable; urgency=medium + + * OpenJDK 25.0.1 release, build 8. + - CVEs: + + CVE-2025-53057, 8360937: Enhance certificate handling. + + CVE-2025-53066, 8356294: Enhance Path Factories. + + CVE-2025-61748, 8359454: Enhance String handling. + + [ Vladimir Petko ] + * d/s/lintian-overrides: Override false positive nproc warning. + * d/{JB-doc.overrides.in, JB-jre-headless.overrides.in}: Add override for + old FSF copyright address. + * d/JB-jvmci-jdk.overrides.in: Update overrides for jvmci package. + * d/t/problems.csv: DocRootDirPermissionsTest.java - Fix typo in + the test name. + * d/t/problems.csv: Synchronize problem list. + * d/t/dependencies.sh: Relax test assertion for PC/SC library. + * d/rules: Prefer openjdk-25 for bootstrap. + * d/control: Regenerate. + * d/p/jdk-8369450.patch: Fix ftbfs due to rust-coreutils date. LP: #2127120. + * Security Manager was removed in -25, so the JDK image no longer has + default.policy and java.policy. + * jaxp-strict.properties.template was moved by d/rules to + jaxp-strict.properties, but we still created symlink to + jaxp-strict.properties.template. Replace mv with cp so that link + to jaxp-strict.properties.template is not broken. + * d/rules: Run jtreg autopkgtests only on jtreg architectures. + * d/t/{hotspot-autopkgtest.in, jdk-autopkgtest.in}: Skip tests + that require a large amount of memory. + * d/t/{control,hotspot-autopkgtest.sh, jdk-autopkgtest.sh}: + Regenerate. + * d/p/jdk-8370049-proposed.patch: s390x G1 barrier compare and exchange + operation should update output parameter instead of input. LP: #2127750. + + [ Matthias Klose ] + * d/rules: Let the install target depend on the build target. + Closes: #1105520. + * Update the location of the upstream VCS. + + -- Matthias Klose Wed, 22 Oct 2025 12:19:10 +0200 + +openjdk-25 (25+36-1) unstable; urgency=medium + + * OpenJDK 25 GA, build 36. Release notes: + https://mail.openjdk.org/pipermail/jdk-dev/2025-September/010483.html + + [ Vladimir Petko ] + * d/rules: Mark as release. + * d/watch: Regenerate. + + -- Matthias Klose Wed, 17 Sep 2025 02:43:31 +0200 + +openjdk-25 (25~36ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 36. + * Build using GCC 15 on development releases. + + -- Matthias Klose Fri, 29 Aug 2025 11:59:40 +0200 + +openjdk-25 (25~34ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 34. + + [ Matthias Klose ] + * Update VCS attributes. + + [ Vladimir Petko ] + * d/copyright-generator/copyright-gen.py: bump copyright year. + * d/copyright: regenerate. + + -- Matthias Klose Tue, 05 Aug 2025 08:35:23 +0200 + +openjdk-25 (25~32ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 32. + + [ Vladimir Petko ] + * d/p/jdk-8359735-proposed.patch: Fix process tests failing in Ubuntu 25.10. + * d/rules: Add -XX:TieredStopAtLevel=1 to boot jdk args for s390x to work + around an Ubuntu LP builder issue. + + -- Matthias Klose Fri, 18 Jul 2025 13:45:05 +0200 + +openjdk-25 (25~25ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 25. + * Prefer OpenJDK 25 as a build dependency. Closes: #1106303. + + -- Matthias Klose Sat, 31 May 2025 11:40:07 +0200 + +openjdk-25 (25~22ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 22. + + -- Matthias Klose Sun, 11 May 2025 12:03:44 +0200 + +openjdk-25 (25~20ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 20. + + -- Matthias Klose Fri, 25 Apr 2025 05:43:35 +0200 + +openjdk-25 (25~17ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 17. + + * Honour DEB_BUILD_OPTIONS=parallel=N while running jtreg tests (Helmut + Grohne). Closes: #1095920. + + -- Matthias Klose Sat, 05 Apr 2025 08:42:24 +0200 + +openjdk-25 (25~16ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 16. + + [ Vladimir Petko ] + * d/p/jdk-8352800-proposed.patch: Add missing header. + * d/p/test-empty-path.patch: Disable tests that require access to + getFileStore(path) due to JDK-8166162. + * d/t/jtreg-autopkgtest.*: Set ulimit -c unlimited for + runtime/ErrorHandling/CreateCoredumpOnCrash.java. + * d/t/problems.csv: Disable tests failing due to upstream bugs. + + -- Matthias Klose Thu, 27 Mar 2025 19:35:18 +0100 + +openjdk-25 (25~15ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 15. + * Fix some lintian warnings. + + -- Matthias Klose Sun, 23 Mar 2025 06:46:09 +0100 + +openjdk-25 (25~14ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 14. + * debian/tests: Regenerate test files for 25. + + -- Matthias Klose Sat, 15 Mar 2025 08:13:37 +0100 + +openjdk-25 (25~10ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 10. + + -- Matthias Klose Fri, 14 Feb 2025 22:19:23 +0100 + +openjdk-25 (25~9ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 9. + + [ Pushkar Kulkarni ] + * d/control: New graal-builder jdk package. + * d/rules: Generate graal-builder jdk package. + + [ Matthias Klose ] + * Fix jvmci package description. + * Clean up jvmci package. + * Install changelog and copyright for jvmci. + * Remove some man pages, that appear with 24~36ea without binaries: + jabswitch.1, jaccess*.1, kinit.1, klist.1, ktab.1. + + -- Matthias Klose Sun, 09 Feb 2025 20:32:32 +0100 + +openjdk-25 (25~8ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 8. + * Disable explicit power8 optimization on ppc64el. + * Build zero with --disable-precompiled-headers. + + -- Matthias Klose Sun, 02 Feb 2025 13:57:28 +0100 + +openjdk-25 (25~7ea-1) unstable; urgency=medium + + * OpenJDK 25 snapshot, Build 7. + + [ Vladimir Petko ] + * d/p/jdk-8347014-proposed.patch: Define MAP_FIXED_NOREPLACE_value for alpha. + * d/t/problems.csv: Add openjdk-24 and openjdk-25 to the problems.csv. + * d/rules: Dump complete hs_err_pid and replay_pid logs to stdout. + * d/t/problems.csv: Fix typo - remove jdk prefix for + sun/security/util/Debug/DebugOptions.java. + * d/rules: Disable dtrace on jammy armhf (was not enabled before and cannot + be built due to a GCC ICE (see LP #2091225). + + [ Matthias Klose ] + * Try to work-around a ftbfs on alpha. For now we keep the + zero-alpha-workaround patch enabled instead of jdk-8347014-proposed. + * d/rules: Also dump logs for zero builds and for build failures. + + -- Matthias Klose Sat, 25 Jan 2025 21:12:03 +0100 + +openjdk-25 (25~4ea-1) experimental; urgency=medium + + * OpenJDK 25 snapshot, Build 4. + + [ Vladimir Petko ] + * d/rules: Set JVM thread size and Java thread size for power architectures and S390x + to avoid a stack overflow error. + + [ Matthias Klose ] + * d/rules: Also do the above fix for alpha and sparc64. + * Try to work-around a ftbfs on alpha. + + -- Matthias Klose Sun, 05 Jan 2025 13:09:04 +0100 + +openjdk-25 (25~0ea-1) experimental; urgency=medium + + * OpenJDK 25 snapshot, Build 0. + + -- Matthias Klose Fri, 06 Dec 2024 11:27:05 +0100 + +openjdk-24 (24~26ea-1) unstable; urgency=medium + + * OpenJDK 24 snapshot, Build 26. + + [ Matthias Klose ] + * d/patches/{atk-wrapper-security,update-permission-test}: Disable. + * d/patches/warn-fontmanager: Update. + + [ Pushkar Kulkarni ] + * For jammy, work around GCC ICE on armhf. See LP #1953128. + * d/t/problems.csv: Update based on recent JTREG runs. + + -- Matthias Klose Fri, 29 Nov 2024 12:21:53 +0100 + +openjdk-24 (24~22ea-1) unstable; urgency=medium + + * OpenJDK 24 snapshot, Build 22. + * Consolidate setting of dtrace architectures. + + -- Matthias Klose Fri, 01 Nov 2024 10:57:23 +0100 + +openjdk-24 (24~20ea-1) unstable; urgency=medium + + * OpenJDK 24 snapshot, Build 20. + + [ Vladimir Petko ] + * d/rules: Do not include dtrace support for S390x (JDK-8305174). + * d/t/problems.csv: Disable jdk/sun/security/util/Debug/DebugOptions.java + due to JDK-8339713. + * d/rules: Disable hotspot for i386 (JDK-8341871). + + -- Matthias Klose Fri, 18 Oct 2024 09:05:23 +0200 + +openjdk-24 (24~16ea-1) unstable; urgency=medium + + * OpenJDK 24 snapshot, Build 16. + * Bump standards version. + * Refresh patches. + + -- Matthias Klose Sun, 22 Sep 2024 17:08:21 +0200 + +openjdk-24 (24~14ea-1) unstable; urgency=medium + + * OpenJDK 24 snapshot, Build 14. + + * Stop providing the versioned names javaNN-sdk-headless, javaNN-sdk, + javaNN-runtime-headless, javaNN-runtime-headless. The versioned + provides java-sdk-headless, java-sdk, java-runtime-headless and + java-runtime-headless exist since OpenJDK 17. + + [ Vladimir Petko ] + * d/p/reproducible-properties-timestamp.diff: Use PrivilegedAction + to avoid SecurityManager exception. + * Enable dtrace support. + + -- Matthias Klose Thu, 05 Sep 2024 22:24:27 +0200 + +openjdk-24 (24~10ea-2) unstable; urgency=medium + + * Fix typo in jre-headless dependencies. + + -- Matthias Klose Sun, 11 Aug 2024 02:52:32 +0200 + +openjdk-24 (24~10ea-1) unstable; urgency=medium + + * OpenJDK 24 snapshot, Build 10. + + [ Vladimir Petko ] + * d/changelog: Remove trailing empty line. + * d/copyright-generator/strip-common-licenses.sh: Add GPLv3 to the + list of common licenses. + * d/JB-*.overrides.in, d/s/lintian-overrides: Update lintian overrides. + * d/control: Add Java 24 Provides. + * d/t/problemlist.csv: Update problemlist.csv for July release + * d/t/jtreg-autopkgtest.{in,sh}: Increase jtreg test timeouts. + + [ Emmanuel Bourg ] + * Restore and update the reproducible-properties-timestamp patch. + + -- Matthias Klose Sat, 10 Aug 2024 15:50:51 +0200 + +openjdk-24 (24~8ea-1) unstable; urgency=medium + + * OpenJDK 24 snapshot, Build 8. + + [ Vladimir Petko ] + * d/t/write-problems.in: Fix typo that caused all tests present + in d/t/problems.csv to be excluded. + * d/t/{jdk,hotspot}-autopkgtest.in: Call d/t/write-problems.sh + instead of d/t/write-problems. + * d/t/*.sh: Regenerate tests. + * d/rules: Enable fallback linker for architectures that do not + provide a native one. + * d/rules, d/control.in: Depend on pkgconf rather than pkg-config in + bookworm and later releases. This resolves lintian warning + build-depends-on-obsolete-package Build-Depends: pkg-config => pkgconf. + * d/rules: Drop autotools-dev dependency for the modern debhelper. + This resolves obsolete autotools-dev dependency lintian warning. + See #844191. + * d/t/control.in: allow stderr for smoke tests. + + -- Matthias Klose Tue, 30 Jul 2024 06:17:37 +0200 + +openjdk-24 (24~7ea-1) unstable; urgency=medium + + * OpenJDK 24 snapshot, Build 7. + + [ Vladimir Petko ] + * d/rules: Enable jtreg again. + * d/t/jni-link.{in,sh}: Drop obsolete test. After JDK-8331541 the build + will fail if JVM contains undefined symbols. + * d/rules: Add missing file. + * d/p/jdk-8334502.patch: Fix iso8601_utctime armhf function. + * d/p/jdk-8334895-proposed.patch: Resolve configure issue on arm64. + * d/rules: Include /usr/share/dpkg/buildflags.mk to avoid configure failure + due to undefined environment variables. + * d/p/jdk-8335238-workaround.patch: Temporary revert fix for JDK-8320886 + on i386 to fix the ftbfs due to hanging jtreg tests. + * d/rules, d/t/*: Collate all excluded tests into d/problemlist.csv. + * d/rules: enable Fallback linker for Foreign Function and Memory API + on i386 and armhf. + * d/watch: Use fixed googletest version. + * d/p/jdk-8336529-proposed.patch: Fix time_t migration issue on armhf, + unable to set file last modified timestamp. + + [ Matthias Klose ] + * Build using GCC 14. + * Install jnativescan into jdk-headless. + + -- Matthias Klose Fri, 19 Jul 2024 09:01:13 +0200 + +openjdk-24 (24~4ea-1) experimental; urgency=medium + + * OpenJDK 24 snapshot, Build 4. + + -- Matthias Klose Fri, 28 Jun 2024 19:36:22 +0200 + +openjdk-23 (23~28ea-1) unstable; urgency=medium + + * OpenJDK 23 snapshot, Build 28. + + -- Matthias Klose Fri, 28 Jun 2024 17:35:55 +0200 + +openjdk-23 (23~20ea-1) unstable; urgency=medium + + * OpenJDK 23 snapshot, Build 20. + + [ Vladimir Petko ] + * Add autopkgtest to test that JNI applications using the invocation API + can be linked. + * Add autopkgtest for libpcsclite initialisation. + + [ Matthias Klose ] + * Build using GCC 10 for focal. + * Fix fontmanager build with system harfbuzz. + + -- Matthias Klose Wed, 01 May 2024 06:15:47 +0200 + +openjdk-23 (23~15ea-1) unstable; urgency=medium + + * OpenJDK 23 snapshot, Build 15. + + [ Vladimir Petko ] + * Fix installing the s390x build. + * Emit warning to install openjdk-*-jre package when fontmanager is + used, but only openjdk-*-jre-headless is installed. + * Add support to build --with-hsdis=binutils, but keep it off by default. + + [ Matthias Klose ] + * Update cups dependencies for time_t64. + + [ Pushkar Kulkarni ] + * copyright-generator: Derive release from debian/rules. + + -- Matthias Klose Sat, 23 Mar 2024 14:40:10 +0100 + +openjdk-23 (23~14ea-1) experimental; urgency=medium + + * OpenJDK 23 snapshot, Build 14. + + [ Vladimir Petko ] + * Run the hotspot and jdk autopkg tests on all architectures. + * Add bash, lsb-release and xauth as dependencies for autopkg tests. + * Build openjdk-23-testsupport packages, containing the binaries + required to run the autopkg tests. + * d/t/{hotspot,jdk}-autopkgtest.{sh, in}: Set default arguments to + tier1 tests, otherwise pass user's arguments while setting correct + test directory and native path. + * Fix lintian override package name. + + [ Pushkar Kulkarni ] + * Corrections to patch arch-add-ports.diff. + * Fix a typo in the vendor name derivation logic. + + [ Matthias Klose ] + * Remove the GTK 2.x bits. + + -- Matthias Klose Thu, 14 Mar 2024 18:17:32 +0100 + +openjdk-23 (23~13ea-1) unstable; urgency=medium + + * OpenJDK 23 snapshot, Build 13. + + * libcups2, libfontconfig1: Make it a recommends in jre-headless, + a dependency in jre. + * Make the dependencies for libfontmanager.so and libjsound.so + recommendations in jre-headless, and dependencies in jre. + * Drop build dependencies on libgtk2 | libgtk3. + * Disable running the tests for the time_t64 bootstrap. + + -- Matthias Klose Mon, 11 Mar 2024 23:53:00 +0100 + +openjdk-23 (23~10ea-1) unstable; urgency=medium + + * OpenJDK 23 snapshot, Build 10. + + -- Matthias Klose Mon, 19 Feb 2024 00:31:52 +0100 + +openjdk-23 (23~6ea-1) unstable; urgency=medium + + * OpenJDK 23 snapshot, Build 6. + + [ Matthias Klose ] + * Don't try to install jhsdb on armhf with a zero-only build. + * d/changelog: Whitespace cleanup. + * Update build dependency on libfontconfig-dev. + * Apply proposed patch for JDK-8307977. Addresses: #1034600. + + [ Vladimir Petko ] + * d/rules: Do not delete d/watch on clean. + * d/rules: Trim trailing whitespaces from debian/control. + + [ Pushkar Kulkarni ] + * Minor improvements to the copyright-generator. + * Regenerate d/copyright. + + -- Matthias Klose Sat, 20 Jan 2024 14:51:31 +0100 + +openjdk-23 (23~4ea-1) unstable; urgency=medium + + * OpenJDK 23 snapshot, Build 4. + + [ Matthias Klose ] + * Don't build hotspot on armhf for now, + see https://bugs.openjdk.org/browse/JDK-8321125 + + [ Vladimir Petko ] + * Generate d/watch to cope with early access and release builds. + + -- Matthias Klose Sun, 07 Jan 2024 12:10:48 +0100 + +openjdk-23 (23~3ea-1) experimental; urgency=medium + + * OpenJDK 23 snapshot, Build 3. + + [ Vladimir Petko ] + * Update lintian overrides. + + -- Matthias Klose Sun, 24 Dec 2023 12:22:26 +0100 + +openjdk-22 (22~25ea-1) unstable; urgency=medium + + * OpenJDK 22 snapshot, Build 25. + + [ Vladimir Petko ] + * d/copyright: Fix lintian warning. + + -- Matthias Klose Fri, 24 Nov 2023 10:15:39 +0100 + +openjdk-22 (22~24ea-1) unstable; urgency=medium + + * OpenJDK 22 snapshot, Build 24. + + [ Pushkar Kulkarni ] + * debian/copyright: Fix whitespace issues. + + -- Matthias Klose Thu, 16 Nov 2023 13:10:35 +0100 + +openjdk-22 (22~22ea-1) unstable; urgency=medium + + * OpenJDK 22 snapshot, Build 22. + + [ Vladimir Petko ] + * d/rules: pack external debug symbols with build-id, do not strip + JVM shared libraries. LP: #2012326, LP: #2016739. + + [ Pushkar Kulkarni ] + * debian/copyright: Update copyrights and notices, using a generator script. + + [ Matthias Klose ] + * Drop the libpcsclite-dlopen patch. + + -- Matthias Klose Tue, 31 Oct 2023 08:26:30 +0100 + +openjdk-22 (22~20ea-1) unstable; urgency=medium + + * OpenJDK 22 snapshot, Build 20. + + [ Vladimir Petko ] + * d/p/build_test.patch: Use openjdk-17 patch for backports compatibility. + * d/copyright: include google test license. + * d/rules, d/watch: bundle google test library. + * d/patches: remove build_gtest.patch. + * d/tests: refresh problem lists. + * d/p/exclude_broken_tests.patch: drop patch. + + -- Matthias Klose Fri, 20 Oct 2023 10:16:58 +0200 + +openjdk-22 (22~16ea-1) unstable; urgency=medium + + * OpenJDK 22 snapshot, Build 16. + + [ Pushkar Kulkarni ] + * debian/copyright: Update copyrights and notices. + + [ Vladimir Petko ] + * d/p/build_test.patch: Use openjdk-17 patch for backports compatibility. + + [ Matthias Klose ] + * Apply proposed fix for JDK-8313438, fixing the s390x build. + + -- Matthias Klose Tue, 26 Sep 2023 11:59:51 +0200 + +openjdk-22 (22~15ea-2) unstable; urgency=medium + + * Apply proposed fix for JDK-8315940, fixing the armhf build. + + -- Matthias Klose Sun, 17 Sep 2023 14:54:37 +0200 + +openjdk-22 (22~15ea-1) unstable; urgency=medium + + * OpenJDK 22 snapshot, Build 15. + * Disable running the tests on powerpc. Closes: #1051918. + * Build zero on loong64. + + -- Matthias Klose Sun, 17 Sep 2023 09:14:31 +0200 + +openjdk-22 (22~13ea-1) unstable; urgency=medium + + * OpenJDK 22 snapshot, Build 13. + + [ Matthias Klose ] + * Tighten dependency on jtreg7. + * Build-depend on the unversioned libfreetype-dev. + + [ Pushkar Kulkarni ] + * Enable JdiListeningLocalhostExecutionControlTest.java again. + + -- Matthias Klose Mon, 04 Sep 2023 08:57:23 +0200 + +openjdk-22 (22~12ea-1) unstable; urgency=medium + + * OpenJDK 22 snapshot, Build 12. + + [ Matthias Klose ] + * 8313795: Fix for broken ppc and s390x builds. + * Explicitly configure --without-jtreg with the nocheck profile + + [ Vladimir Petko ] + * Refresh exclude_broken_tests.patch + * Drop 8313795.diff, applied upstream. + + [ Pushkar Kulkarni ] + * d/p/series - The jaw-classpath and jaw-optional patches help work around + the problem of an application being unable to load ATK wrapper classes + since the introduction of the JPMS(JDK9). With openjdk-8, these classes + were loaded as extension classes from jre/lib/ext. The best alternative + today is that the user makes sure java-atk-wrapper is installed, modifies + the accessibility.properties file to enable ATK and sets the CLASSPATH to + point to the location of the ATK jar. These patches have been dropped on + openjdk-11 and openjdk-17 previously. + + -- Matthias Klose Thu, 24 Aug 2023 12:41:26 +0200 + +openjdk-22 (22~9ea-1) unstable; urgency=medium + + * OpenJDK 22 snapshot, Build 9. + + -- Matthias Klose Fri, 04 Aug 2023 03:08:23 +0200 + +openjdk-22 (22~7ea-1) unstable; urgency=medium + + * OpenJDK 22 snapshot, Build 7. + + [ Vladimir Petko ] + * d/t/jtreg-autopkgtest.{sh,in}: JDK-8232153 - set NSS_DEFAULT_DB_TYPE + to let sun/security/pkcs11/Secmod/AddTrustedCert.java pass. + * d/p/exclude-broken-tests.patch: quarantine pkcs11 tests failing with NSS 3.91. + * d/t/problems-armhf.txt: quarantine armhf failing tests: + - java/net/httpclient/ManyRequestsLegacy.java: SSL request timeout. + - java/util/Random/RandomTestBsi1999.java: deadlock in CI. + + -- Matthias Klose Thu, 20 Jul 2023 11:03:23 +0200 + +openjdk-22 (22~5ea-1) unstable; urgency=medium + + * OpenJDK 22 snapshot, Build 5. + + [ Matthias Klose ] + * Provide versioned java-runtime, java-runtime-headless, java-sdk + and java-sdk-headless virtual packages (Emmanuel Bourg). + * Link with --no-as-needed. Closes: #1031521. + * d/rules: Remove EXTRA_.*FLAGS_JDK macros. + * Add support for arc (untested), hppa (untested) and ia64. + * Configure --with-stdc++lib=static on ia64. + * Fix FTCBFS: Add libffi-dev:native to B-D (Helmut Grohne). + * Build using GCC 13. + + [ Vladimir Petko ] + * Update debian/watch for Java 22. + * d/p/arch-add-ports.diff: update patch. + + -- Matthias Klose Mon, 10 Jul 2023 12:58:35 +0200 + +openjdk-22 (22~3ea-1) unstable; urgency=medium + + * OpenJDK 22 snapshot, Build 3. + * Remove breaks/replaces from OpenJDK 21 packages. + + -- Matthias Klose Mon, 26 Jun 2023 09:40:39 +0200 + +openjdk-21 (21~28ea-1) unstable; urgency=medium + + * OpenJDK 21 snapshot, Build 28. + * Add support for alpha, m68k, ppc, sh, x32. + + -- Matthias Klose Mon, 26 Jun 2023 07:48:49 +0200 + +openjdk-21 (21~27ea-4) unstable; urgency=medium + + * debian/rules: Correctly set BOOT_JDK_HOME. + + -- Matthias Klose Fri, 16 Jun 2023 20:53:53 +0200 + +openjdk-21 (21~27ea-3) unstable; urgency=medium + + * Regenerate autopkg test scripts. + + -- Matthias Klose Fri, 16 Jun 2023 14:51:08 +0200 + +openjdk-21 (21~27ea-2) unstable; urgency=medium + + * OpenJDK 21 snapshot, Build 27. + + [ Vladimir Petko ] + * Also disable tests on trixie. No jtreg7 yet. + * debian/copyright: Convert to a machine-readable format. + * debian/copyright: Align excludes statement with openjdk-17. + * debian/watch: Add ea repack suffix. + * Fix build on mipsel and mips64el. + * Move ct.sym from the jre into the jdk package. + + [ Matthias Klose ] + * Enable tests for trixie and unstable. + + -- Matthias Klose Fri, 16 Jun 2023 08:56:39 +0200 + +openjdk-21 (21~26ea-2) unstable; urgency=medium + + [ Vladimir Petko ] + * d/rules: only compile google tests when with_check is enabled, + disable them for bullseye and jammy. + + -- Matthias Klose Mon, 12 Jun 2023 06:29:28 +0200 + +openjdk-21 (21~26ea-1) unstable; urgency=medium + + * OpenJDK 21 snapshot, Build 26. + + [ Vladimir Petko ] + * d/p/*: refresh patches. + * Copy OpenJDK 20 packaging changes: + - d/rules: pack external debug symbols with build-id, do not pack duplicate + symbols, do not strip JVM shared libraries (LP: #2012326, LP: #2016739). + - d/{control, compat}: update debhelper-compat version, add jtreg7 + dependencies, regenerate control. + - d/t/{jdk,hotspot,jaxp,lantools}: run tier1 and tier2 jtreg tests only, + add test options from OpenJDK makefile. + - d/t/*: fix test environment: add missing -nativepath (LP: #2001563). + - d/t/jdk: provide dbus session for the window manager (LP: #2001576). + - d/p/build_gtest.patch: build OpenJDK with the system googletest + (LP: #2012316). + * d/p/*: add patches for jtreg tests: + - misalign-pointer-for-armhf.patch: packaging-specific patch to fix test + failure introduced by d/p/m68k-support.diff. + - log-generated-classes-test.patch: workaround JDK-8166162. + - update-permission-test.patch: add security permissions for testng 7. + - ldap-timeout-test-use-ip.patch, test-use-ip-address.patch: + Ubuntu-specific patches to workaround missing DNS resolver on the build + machines. + - exclude_broken_tests.patch: quarantine failing tests. + * Enable ppc64el JRE zero build as JDK-8299476 is fixed. + * Known issues: + - amd64: test/jdk/sun/security/pkcs11/KeyStore/CertChainRemoval.java: + https://mail.openjdk.org/pipermail/jdk-dev/2023-May/007836.html + - s390x: test/hotspot/jtreg/runtime/NMT/VirtualAllocCommitMerge.java: + https://mail.openjdk.org/pipermail/hotspot-dev/2023-June/075316.html + + [ Matthias Klose ] + * Fix jaxp.properties installation. + * Bump standards version. + + -- Matthias Klose Sat, 10 Jun 2023 17:54:09 +0200 + +openjdk-21 (21~14ea-1) UNRELEASED; urgency=medium + + [ Vladimir Petko ] + * OpenJDK 21 snapshot, Build 14. + * d/copyright, d/watch: implement uscan repackaging (LP: #2011749). + * d/rules: use --with-debug-symbols=none (LP: #2003820). + * debian/JB-jre-headless.postinst.in: trigger ca-certificates-java after jre + is set up. + + -- Matthias Klose Fri, 09 Jun 2023 17:15:22 +0200 + +openjdk-21 (21~7ea-1) unstable; urgency=medium + + * OpenJDK 21 snapshot, build 7. + * Don't build zero on ppc64el for now, see JDK-8298655. + + -- Matthias Klose Thu, 26 Jan 2023 10:32:21 +0100 + +openjdk-21 (21~3ea-2) unstable; urgency=medium + + * Fix autopkg test dependencies. + + -- Matthias Klose Sat, 24 Dec 2022 15:35:45 +0100 + +openjdk-21 (21~3ea-1) unstable; urgency=medium + + * OpenJDK 21 snapshot, build 3. + + -- Matthias Klose Thu, 22 Dec 2022 21:06:42 +0100 + +openjdk-21 (21~1ea-1) unstable; urgency=medium + + * OpenJDK 21 snapshot, build 1. + + -- Matthias Klose Mon, 12 Dec 2022 14:14:44 +0100 + +openjdk-20 (20~26ea-1) unstable; urgency=medium + + * OpenJDK 20 snapshot, build 26 (rampdown phase one). + * Handle jtreg package name for backports. + + -- Matthias Klose Mon, 12 Dec 2022 12:34:21 +0100 + +openjdk-20 (20~20ea-1) unstable; urgency=medium + + * OpenJDK 20 snapshot, build 20. + + -- Matthias Klose Fri, 21 Oct 2022 10:28:19 +0200 + +openjdk-20 (20~17ea-2) unstable; urgency=medium + + * Also include the classlist file for zero builds. + + -- Matthias Klose Mon, 03 Oct 2022 11:18:06 +0200 + +openjdk-20 (20~17ea-1) unstable; urgency=medium + + * OpenJDK 20 snapshot, build 17. + * Refresh patches. + + -- Matthias Klose Thu, 29 Sep 2022 19:40:13 +0200 + +openjdk-19 (19+36-2) unstable; urgency=medium + + * Enable hotspot on riscv64. Closes: #1020545. + + -- Matthias Klose Wed, 28 Sep 2022 16:16:51 +0200 + +openjdk-19 (19+36-1) unstable; urgency=medium + + * OpenJDK 19 release. + * Bump standards version. + + -- Matthias Klose Fri, 23 Sep 2022 14:55:13 +0200 + +openjdk-19 (19~32ea-1) unstable; urgency=medium + + * OpenJDK 19 snapshot, build 32. + * Re-enable running the test suite. + * Only try to re-run failed tests once instead of three times. + + -- Matthias Klose Fri, 22 Jul 2022 10:25:56 +0200 + +openjdk-19 (19~31ea-1) unstable; urgency=medium + + * OpenJDK 19 snapshot, build 31. + + -- Matthias Klose Sun, 17 Jul 2022 11:04:08 +0200 + +openjdk-19 (19~23ea-1) unstable; urgency=medium + + * OpenJDK 19 snapshot, build 23. + + -- Matthias Klose Thu, 19 May 2022 11:55:51 +0200 + +openjdk-19 (19~20ea-1) unstable; urgency=medium + + * OpenJDK 19 snapshot, build 20. + * Refresh patches. + + -- Matthias Klose Tue, 03 May 2022 18:32:32 +0200 + +openjdk-18 (18~36ea-1) unstable; urgency=medium + + * OpenJDK 18 snapshot, build 36 (first release candidate). + + -- Matthias Klose Thu, 17 Feb 2022 09:22:24 +0100 + +openjdk-18 (18~32ea-1) unstable; urgency=medium + + * OpenJDK 18 snapshot, build 32. + * Add jwebserver into the openjdk-jdk-headless package. + + -- Matthias Klose Fri, 21 Jan 2022 11:45:56 +0100 + +openjdk-18 (18~20ea-1) unstable; urgency=medium + + * OpenJDK 18 snapshot, build 20. + * Bump standards version. + + -- Matthias Klose Thu, 21 Oct 2021 08:36:16 +0200 + +openjdk-18 (18~15ea-4) unstable; urgency=medium + + * Fix installation of the zero VM, now installed as zero, not as server. + + -- Matthias Klose Fri, 17 Sep 2021 18:43:49 +0200 + +openjdk-18 (18~15ea-1) unstable; urgency=medium + + * OpenJDK 18 snapshot, build 15. + + -- Matthias Klose Thu, 16 Sep 2021 10:10:47 +0200 + +openjdk-18 (18~12ea-1) unstable; urgency=medium + + * OpenJDK 18 snapshot, build 12. + * Encode the early-access status into the package version. + + -- Matthias Klose Thu, 26 Aug 2021 12:46:22 +0200 + +openjdk-18 (18~2-1) experimental; urgency=medium + + * OpenJDK 18 snapshot, build 2. + * Only build using lto with GCC 11. + * Build using GCC 11 in recent distributions. + * Remove rimd, removed upstream. + + -- Matthias Klose Thu, 17 Jun 2021 15:00:57 +0200 + +openjdk-17 (17~24-1) unstable; urgency=medium + + * OpenJDK 17 snapshot, build 24. + * Drop the work around for JDK 8211105. + * Remove jaotc (the experimental JIT compiler), removed upstream. + * Add an (unapplied) patch to replace OASIS header files with ones + imported from NSPR and NSS. See #985765. Not reviewed, not applying. + + -- Matthias Klose Thu, 27 May 2021 11:26:59 +0200 + +openjdk-17 (17~19-1) unstable; urgency=high + + * OpenJDK 17 snapshot, build 19. + - Fix JDK-8250568: Less ambiguous processing (CVE-2021-2161). + - Fix JDK-8249906: Enhance opening JARs (CVE-2021-2163). + + -- Matthias Klose Thu, 22 Apr 2021 09:51:43 +0200 + +openjdk-17 (17~17-1) unstable; urgency=medium + + * OpenJDK 17 snapshot, build 17. + * Refresh patches. + * Prefer to build using openjdk-17 instead of -16. Closes: #986526. + + -- Matthias Klose Thu, 08 Apr 2021 09:37:40 +0200 + +openjdk-17 (17~15-1) unstable; urgency=medium + + * OpenJDK 17 snapshot, build 15. + * Fix another upstream typo to build with external harfbuzz. Closes: #985668. + * Disable running the tests on mipsel and mips64el. Times out, and if it + succeeds, it taken at least five days to run. + + -- Matthias Klose Thu, 25 Mar 2021 10:31:15 +0100 + +openjdk-17 (17~14-1) unstable; urgency=medium + + * OpenJDK 17 snapshot, build 14. + * Don't use the triplet-prefixed binutils tools for backports. + * Simplify compiler selection for backports. + * Fix build with older glibc versions. See JDK-8262501. + * Apply untested patch suggested to fix mips issue. See #983878. + + -- Matthias Klose Thu, 18 Mar 2021 19:42:16 +0100 + +openjdk-17 (17~11-1) unstable; urgency=medium + + * OpenJDK 17 snapshot, build 11. + * Configure --with-copyright-year. Addresses: #956154. + * Restore the libpcsclite-dlopen patch. Closes: #983465. + * Don't run the testsuite on armel and riscv64. Crashing the buildds. + + -- Matthias Klose Thu, 25 Feb 2021 10:33:32 +0100 + +openjdk-17 (17~10-2) unstable; urgency=medium + + * Fix the build logic, jaotc and jhsdb tools not available on all archs. + * Ship the jfc files used by jfr. + * reproducible-build-jmod.diff: Fall back to the unpatched behavior + for backports. + * Only build with system harfbuzz for recent releases. + + -- Matthias Klose Sat, 20 Feb 2021 12:02:45 +0100 + +openjdk-17 (17~10-1) unstable; urgency=medium + + * OpenJDK 17 snapshot, build 10. + * Fix building with OpenJDK 17 as the boot jdk. + * Build with Rules-Requires-Root: no. + * Move libawt_xawt.so, libjawt.so into the jre package. Addresses: #908058. + * Move the jfr binary from -jre-headless to -jdk-headless. Development tool. + + -- Matthias Klose Fri, 19 Feb 2021 13:12:19 +0100 + +openjdk-17 (17~9-1) unstable; urgency=medium + + * OpenJDK 17 snapshot, build 9. + * Enable running the tests. + * Remove the disable-doclint-by-default patch. Was not applied anymore + in 17. Closes: #982521. + + -- Matthias Klose Thu, 11 Feb 2021 10:13:25 +0000 + +openjdk-17 (17~8-1) unstable; urgency=medium + + * OpenJDK 17 snapshot, build 8. + * Don't try to apply the removed alpha-float-const patch. + * Drop the powerpcspe packaging bits. + + -- Matthias Klose Thu, 04 Feb 2021 14:35:28 +0100 + +openjdk-17 (17~7-1) unstable; urgency=medium + + * OpenJDK 17 snapshot, build 7. + * Update watch file. + * Use debugedit to generate unique build-id's and remove the openjdk-N-dbg + file conflicts. + * Remove KFreeBSD build support and patches, not updated since OpenJDK 8. + * Remove obsolete patches: alpha-float-const, libpcsclite-dlopen, + parallel-build-fix, s390x-thread-stack-size. + + -- Matthias Klose Thu, 28 Jan 2021 14:52:27 +0100 + +openjdk-17 (17~5-1) unstable; urgency=medium + + * OpenJDK 17 snapshot, build 5. + + -- Matthias Klose Tue, 19 Jan 2021 10:29:50 +0100 + +openjdk-17 (17~4-0ubuntu1) hirsute; urgency=medium + + * OpenJDK 17 snapshot, build 4. + + -- Matthias Klose Sat, 09 Jan 2021 17:25:46 +0100 + +openjdk-17 (17~3-1) experimental; urgency=medium + + * OpenJDK 17 snapshot, build 3. + * OpenJDK 17 is supposed to be the next OpenJDK LTS release seeing extended + updates and security support. + + -- Matthias Klose Mon, 28 Dec 2020 13:57:12 +0100 + +openjdk-16 (16~29-1) unstable; urgency=medium + + * OpenJDK 16 snapshot, build 29. + + -- Matthias Klose Mon, 28 Dec 2020 12:44:30 +0100 + +openjdk-16 (16~27-2) unstable; urgency=medium + + * Fix installation on sparc64. + * Link with libatomic for more zero builds. + * Re-enable zero on armhf. + + -- Matthias Klose Fri, 04 Dec 2020 10:01:45 +0100 + +openjdk-16 (16~27-1) unstable; urgency=medium + + * OpenJDK 16 snapshot, build 27. + * Bump standards version. + + -- Matthias Klose Thu, 03 Dec 2020 16:42:51 +0100 + +openjdk-16 (16~14-1) experimental; urgency=medium + + * OpenJDK 16 snapshot, build 14. + * Build with system harfbuzz. + + -- Matthias Klose Sat, 07 Nov 2020 14:35:22 +0100 + +openjdk-15 (15.0.1+9-3) unstable; urgency=medium + + * Don't enabled shenandoahgc explicitly. + + -- Matthias Klose Sat, 07 Nov 2020 08:54:13 +0100 + +openjdk-15 (15.0.1+9-2) unstable; urgency=medium + + * Update debian/copyright. + * Configure --with-jvm-features=shenandoahgc for hotspot builds. + LP: #1902029. + * Replace the upstream test suite in the autopkg tests with two superficial + tests. It doesn't make any sense to run the whole test suite again, + after running it during the build. + + -- Matthias Klose Thu, 05 Nov 2020 16:55:34 +0100 + +openjdk-15 (15.0.1+9-1) unstable; urgency=medium + + * OpenJDK 15.0.1 release, build 9. + * Build just zero on sparc64 (Adrian Glaubitz). Closes: #965342. + * Call strip-nondeterminism before computing jmod hashes (Julian Gilbey). + * Don't run the jdk tests as an autopkg test, taking too long. + Closes: #970606. + + -- Matthias Klose Wed, 21 Oct 2020 16:46:35 +0200 + +openjdk-15 (15+36-1) unstable; urgency=medium + + * OpenJDK 15 release, build 36. + + -- Matthias Klose Wed, 16 Sep 2020 14:08:36 +0200 + +openjdk-15 (15~32-2) unstable; urgency=medium + + * debian/copyright (remove licenses not found anymore in the sources): + - Little CMS, libpng, GIFLIB. + * Stop building zero on armhf, ftbfs. + + -- Matthias Klose Sun, 19 Jul 2020 10:36:08 +0200 + +openjdk-15 (15~32-1) unstable; urgency=medium + + * OpenJDK 15 snapshot, build 32. + * Build again with -march=zEC12 on Ubuntu/s390x. + * Re-add missing parts of the riscv64 patch. + * Run the tests on release architectures. + + -- Matthias Klose Fri, 17 Jul 2020 15:30:05 +0200 + +openjdk-15 (15~19-1) unstable; urgency=medium + + * OpenJDK 15 snapshot, build 19. + * Configure --with-jtreg=/usr/share/jtreg + * Build with -march=z13 -mtune=z15 on Ubuntu/s390x. + + -- Matthias Klose Thu, 16 Apr 2020 11:53:19 +0200 + +openjdk-15 (15~18-1) unstable; urgency=medium + + * OpenJDK 15 snapshot, build 18. + - Stop shipping the rmic command. + * Make autopkgtests cross-test-friendly (Steve Langasek). LP: #1861467. + * d/tests/jtreg-autopkgtest.in: keep generated hs_err log files + with test artifacts to improve later debug (Tiago Stürmer Daitx). + * d/tests/jtdiff-autopkgtest.in: set default vm to correctly locate (Tiago + Stürmer Daitx) + * jhsdb isn't built on sh4 (Adrian Glaubitz). Addresses: #951774. + * Enable zero for armhf again. + * Enable running the tests again, jtreg now updated to 6.0. + + -- Matthias Klose Mon, 13 Apr 2020 21:16:21 +0200 + +openjdk-15 (15~11-1) unstable; urgency=medium + + * OpenJDK 15 snapshot, build 11. + * Don't apply the disable-doclint-by-default patch, it should be possible + to disable those by command line options. + * Don't apply the reproducible-javadoc-timestamp patch. Needs an update. + * Refresh patches. + * Update all the provides for 15. + + -- Matthias Klose Fri, 21 Feb 2020 09:48:57 +0100 + +openjdk-14 (14~36-1) unstable; urgency=medium + + * OpenJDK 14 snapshot, build 36 (first release candidate). + * Regenerate the control file. Closes: #942783. + * Fix FTCBFS (Helmut Grohne). Closes: #949460. + - Missing Build-Depends: zlib1g-dev:native. + - Use triplet-prefixed objcopy and strip. + * Bump standards version. + + -- Matthias Klose Tue, 11 Feb 2020 09:08:15 +0100 + +openjdk-14 (14~32-1) unstable; urgency=medium + + * OpenJDK 14 snapshot, build 32. + * Make the generated character data source files reproducible (Emmanuel + Bourg). Addresses: #933339. + * Make the generated module-info.java files reproducible (Emmanuel Bourg). + Addresses: #933342. + * Make the generated copyright headers reproducible (Emmanuel Bourg). + Addresses: #933349. + * Make the build user reproducible (Emmanuel Bourg). Addresses: #933373. + + -- Matthias Klose Thu, 16 Jan 2020 23:31:42 +0100 + +openjdk-14 (14~31-1) unstable; urgency=medium + + * OpenJDK 14 snapshot, build 31. + * openjdk-14-dbg: Conflict with openjdk-13-dbg as well. Closes: #942783. + * Configure with --enable-deprecated-ports=yes on sparc64. Closes: #946723. + * disable Zero on sparc64. Closes: #946766. + + -- Matthias Klose Thu, 09 Jan 2020 15:19:43 +0100 + +openjdk-14 (14~27-1) unstable; urgency=medium + + * OpenJDK 14 snapshot, build 27. + * Fix the jtreg consistency check when building without jtreg. + * Don't call dh_strip_nondeterminism when building for older releases. + * Fix disabling the zero build on arm64 on trusty. + * Re-enable running the tests. + + -- Matthias Klose Sat, 14 Dec 2019 11:21:53 +0100 + +openjdk-14 (14~19-1) unstable; urgency=medium + + * OpenJDK 14 snapshot, build 19. + + -- Matthias Klose Thu, 17 Oct 2019 08:26:17 +0200 + +openjdk-14 (14~18-1) experimental; urgency=medium + + * OpenJDK 14 snapshot, build 18. + * Bump standards version. + * Use dh_strip_nondeterminism (Emmanuel Bourg). Addresses: #933389. + * Fix 8230708, server build on sparc64 (Adrian Glaubitz). Closes: #939565. + * Fix FTBFS with DEB_BUILD_PROFILES=nocheck (Helmut Grohne). + Addresses: #939521. + * Fix debug and src symlinks. Addresses: #893134, #910694, #910696. + + -- Matthias Klose Thu, 10 Oct 2019 11:05:23 +0200 + +openjdk-14 (14~14-2) experimental; urgency=medium + + * OpenJDK 14 snapshot, build 14. + * Don't build zero on armhf, still broken. + + -- Matthias Klose Thu, 12 Sep 2019 17:54:43 +0200 + +openjdk-14 (14~13-1) experimental; urgency=medium + + * OpenJDK 14 snapshot, build 13. + * Properly generate Breaks: rules for bionic (fix typo). + * Remove libgtk-3-dev from build-deps: libgtk-3-dev is not actually + required, package builds fine without it; libgtk2.0-0 or libgtk-3-0 + should be explicitly declared instead in bdeps and tests; + libxrandr-dev should be explicitly added as it is required and was + being included due to libgtk-3-dev dependency. + * Set minimum dependency on jtreg based on testsuite requirements. + * Fail during pre-build if installed jtreg version is lower then + the minimum required version. + * Improve and fix build tests and autopkgtests: + - Depend on default-jre-headless so jtreg will use the + JRE from /usr/default-java; remove JT_JAVA exports as it + no longer needs to be set. + - Update debian/tests/hotspot,jdk,langtools to ignore + jtreg-autopkgtest.sh return code. + - Create debian/tests/jtdiff-autopkgtest.in as it depends + on debian/rules variables. + - debian/tests/jtreg-autopkgtest.sh: + + Enable retry of failed tests to trim out flaky tests. + + Fix unbound variable. + + Keep .jtr files from failed tests only. + - debian/tests/jtdiff-autopkgtest.sh: + + Fail only if an actual regression is detected. + + Add the super-diff comparison from jtdiff. + - debian/rules: + + Preserve all JTreport directories in the test output + directory. + + Use JDK_DIR instead of JDK_TO_TEST for autopkgtest + generation. + + Package all .jtr files from JTwork as jtreg-autopkgtest.sh + makes sure it contains only failing tests. + * Bump standards version. + * Try to build zero on armhf again. + + -- Matthias Klose Fri, 06 Sep 2019 08:22:27 +0200 + +openjdk-14 (14~6-0ubuntu1) eoan; urgency=medium + + * OpenJDK 14 snapshot, build 6. + * Fix dependency generation on the libjpeg runtime. Addresses: #927965. + * Drop dependency on transitional libgl1-mesa-glx package. Addresses: #930611. + * Fix more build issues for Ubuntu precise builds. + * Don't install jhsdb on riscv64 (Aurelian Jarno). + * Tighten dependency on jtreg. + + -- Matthias Klose Thu, 18 Jul 2019 17:44:41 +0200 + +openjdk-14 (14~3-1) experimental; urgency=medium + + * OpenJDK 14 snapshot, build 3. + * Add riscv64 support for zero (Ed Nevill). + * Support using the Java ATK wrapper (Samuel Thibault). Addresses: #900912. + - patches/jaw-classpath.diff: Fix finding the Java ATK wrapper. + - patches/jaw-optional.diff: Make failing to load the Java ATK wrapper + non-fatal. + * Apply proposed fix for zero builds. + + -- Matthias Klose Fri, 28 Jun 2019 12:13:08 +0200 + +openjdk-14 (14~1-1) experimental; urgency=medium + + * OpenJDK 14 snapshot, build 1. + + -- Matthias Klose Fri, 14 Jun 2019 10:09:16 +0200 + +openjdk-13 (13~25-1) experimental; urgency=medium + + * OpenJDK 13 snapshot, build 25. + + -- Matthias Klose Fri, 14 Jun 2019 09:47:38 +0200 + +openjdk-13 (13~24-1) experimental; urgency=medium + + * OpenJDK 13 snapshot, build 24. + + -- Matthias Klose Fri, 07 Jun 2019 09:58:37 +0200 + +openjdk-13 (13~23-1) experimental; urgency=medium + + * OpenJDK 13 snapshot, build 23. + * Fix version number for updated jquery file. + * Print some information about the host configuration before starting + the build. + * Add a watch file (Emmanuel Bourg). + * Apply the updated patch for m68k support (Adrian Glaubitz). + Closes: #928167. + * Apply fix for 8222252, fixing 32bit builds. + + -- Matthias Klose Fri, 31 May 2019 10:12:20 +0200 + +openjdk-13 (13~22-1) experimental; urgency=medium + + * OpenJDK 13 snapshot, build 22. + * Fix src.zip symlink. Addresses: #923118. + * Update patch for m68k support (Adrian Glaubitz). Closes: #928167. + * Configure with --with-version-pre='ea' for upstream tags which are + not upstream releases (has to be set manually). + * Refresh patches. + + -- Matthias Klose Mon, 27 May 2019 19:44:41 +0200 + +openjdk-13 (13~18-1) experimental; urgency=medium + + * OpenJDK 13 snapshot, build 18. + * Add breaks to the openjdk-13-jre-headless package: + - For unattended upgrades: jetty9, netbeans, tomcat8, visualvm. + - For eclipse 3.8 removal: eclipse-platform. Addresses: #925071. + - For configuration with vendor flag: libreoffice-core. + * Add more -dbg package conflicts. Closes: #927745. + * Class data sharing is enabled during the build where available. + Just use the shipped classes.jsa files. Closes: #927441. + + -- Matthias Klose Thu, 25 Apr 2019 10:56:56 +0200 + +openjdk-13 (13~17-2) experimental; urgency=medium + + * Fix the build of the -doc package. + * Don't build zero on armhf for now. + + -- Matthias Klose Fri, 19 Apr 2019 03:00:51 +0200 + +openjdk-13 (13~17-1) experimental; urgency=medium + + [ Matthias Klose ] + * Build the alternate zero VM using the just built hotspot VM. + * Remove the icedtea-sound/pulseaudio build support. + * Remove some xulrunner build bits. + * Annotate the bootstrap dependency with :native. + * Fix installation of the -doc package. Closes: #926845, #926917. + + [ Tiago Stürmer Daitx ] + * Install swing.properties into /conf instead of /lib. + + -- Matthias Klose Thu, 18 Apr 2019 06:33:56 +0200 + +openjdk-13 (13~14-1) experimental; urgency=medium + + [ Matthias Klose ] + * OpenJDK 13 build 14. + * Configure with vendor flags. + * Update package provides for 12 and 13. + + [ Tiago Stürmer Daitx ] + * Revert to GTK2 as default since GTK3 still has padding and + component issues. LP: #1770278. + - debian/patches/keep-gtk2-as-default.patch: revert upstream so + GTK2 is loaded before GTK3 when available. + - debian/rules, debian/control: Set jre to depend on libgtk2.0-0 + and alternatively to libgtk-3-0. + + -- Matthias Klose Thu, 28 Mar 2019 08:54:33 +0100 + +openjdk-13 (13~13-1) experimental; urgency=medium + + * OpenJDK 13 build 13. + + -- Matthias Klose Thu, 21 Mar 2019 14:40:49 +0100 + +openjdk-13 (13~12-1) experimental; urgency=medium + + * OpenJDK 13 build 12. + * Don't apply the m68k-support patch. Needs updates. + + -- Matthias Klose Sat, 16 Mar 2019 20:59:50 +0100 + +openjdk-12 (12~33-1) unstable; urgency=medium + + * OpenJDK 12 build 33 (release candidate 2). + * Add support for DCEVM on am64 and i386. Addresses: #921419. + * openjdk-12-dbg: Conflict with openjdk-11-dbg. Some object files are + identical across OpenJDK versions. Closes: #919790. + * Check for nodoc instead of nodocs in DEB_BUILD_OPTIONS. Closes: #922761. + + -- Matthias Klose Tue, 26 Feb 2019 11:24:37 +0100 + +openjdk-12 (12~32-1) unstable; urgency=medium + + * OpenJDK 12 build 32. + * Attribute test dependencies with . + + -- Matthias Klose Thu, 14 Feb 2019 17:15:22 +0100 + +openjdk-12 (12~31-1) unstable; urgency=medium + + * OpenJDK 12 build 31. + * Configure with vendor flags. + + -- Matthias Klose Thu, 07 Feb 2019 11:50:45 +0100 + +openjdk-12 (12~30-1) unstable; urgency=medium + + * OpenJDK 12 build 30. + + -- Matthias Klose Fri, 01 Feb 2019 23:30:59 +0100 + +openjdk-12 (12~29-2) unstable; urgency=medium + + * Fix merging the packaging changes. + + -- Matthias Klose Fri, 25 Jan 2019 08:38:26 +0100 + +openjdk-12 (12~29-1) unstable; urgency=medium + + * OpenJDK 12 build 29. + * Merge packaging changes from 11.0.2. + * Link zero on alpha with --no-relax (Michael Cree). Closes: #920161). + + -- Matthias Klose Thu, 24 Jan 2019 09:09:16 +0100 + +openjdk-12 (12~28-1) unstable; urgency=medium + + * OpenJDK 12 build 28. + * jhsdb isn't built on alpha. + + -- Matthias Klose Thu, 17 Jan 2019 13:28:33 +0100 + +openjdk-12 (12~27-1) unstable; urgency=medium + + * OpenJDK 12 build 27. + * Don't run the tests on alpha, causing build failure. + + -- Matthias Klose Thu, 10 Jan 2019 12:55:21 +0100 + +openjdk-12 (12~25-1) unstable; urgency=medium + + * OpenJDK 12 build 25. + * Fix Zero on sparc64 (Adrian Glaubitz). Closes: #917008. + + -- Matthias Klose Sat, 22 Dec 2018 01:12:39 +0100 + +openjdk-12 (12~24-2) unstable; urgency=medium + + * Pull patches for 8215353 and 8215374, fixing build on i386. + + -- Matthias Klose Fri, 14 Dec 2018 20:44:28 +0100 + +openjdk-12 (12~24-1) unstable; urgency=medium + + * OpenJDK 12 build 24. + * Re-enable the bootcycle builds for hotspot targets. + * Enable bootcycle builds for zero targets. + + -- Matthias Klose Fri, 14 Dec 2018 19:18:49 +0100 + +openjdk-12 (12~23-3) unstable; urgency=medium + + * Disable the bootcycle build. + + -- Matthias Klose Fri, 07 Dec 2018 01:23:44 +0100 + +openjdk-12 (12~23-1) unstable; urgency=medium + + * OpenJDK 12 build 23. + * Update VCS attributes in the control file. Addresses: #909736. + * Re-enable the zero build on arm64 and ppc64el. + * Configure with --with-jni-libpath. + * Enable bootcycle builds for hotspot. + * Don't build the test-image target. + + -- Matthias Klose Thu, 06 Dec 2018 16:37:32 +0100 + +openjdk-12 (12~22-0ubuntu2) disco; urgency=medium + + * OpenJDK 12 build 22. + * Disable zero build on arm64 and ppc64el, ftbfs. + + -- Matthias Klose Sun, 02 Dec 2018 21:34:27 +0100 + +openjdk-11 (11.0.1+13-3) unstable; urgency=medium + + * Tighten dependency on debhelper on recent releases. Closes: #911694. + * Reproducible properties file header when SOURCE_DATE_EPOCH is specified. + Closes: #914278. + * Add SOURCE_DATE_EPOCH support to the javadoc tool. Closes: #783938. + * Disable AArch64 intrinsics for sin, cos and log. Closes: #910188. + LP: #1796982. + * Add support for DEB_BUILD_OPTIONS=terse. Closes: #912211. + + -- Matthias Klose Fri, 30 Nov 2018 11:40:28 +0100 + +openjdk-11 (11.0.1+13-2) unstable; urgency=high + + * OpenJDK 11.0.1 release. + + [ Tiago Stürmer Daitx ] + * debian/rules: + - limit the tests that we run for the hotspot, langtools, + and jdk testsuites to improve build times and also to + prevent running unstable or failing tests. + - fix 'if' clause for definition of the TIME command. + - remove guava jar from test classpath, no longer required. + * debian/control, debian/control.in: add a breaks clause to + clojure1.8 <= 1.8.0-7ubuntu1~. + + -- Matthias Klose Wed, 17 Oct 2018 09:31:38 +0200 + +openjdk-11 (11~28-3) unstable; urgency=medium + + * Build-depend on testng. + * Drop the jdk-freetypeScaler-crash patch. Closes: #905718. + * Don't run the tests on armel and mips*. Either too slow, or even + crashing the buildds. + + -- Matthias Klose Wed, 03 Oct 2018 04:24:27 +0200 + +openjdk-11 (11~28-2) unstable; urgency=medium + + [ Matthias Klose ] + * Configure --with-jvm-features=zgc on amd64. Closes: #909560. + + [ Tiago Stürmer Daitx ] + * debian/rules: by default leave atk disabled, move accessibility bridge to + recommends. LP: #1788250. LP: #1788267. + * debian/control.in, debian/control: move accessibility bridge to + recommends, add testng and libguava-java as build dependencies. + * debian/rules: + - copy accessibility files to conf/ (thanks to Samuel Thibault). + - update test rules, set output to jtreg-test-output/ as test/ belongs + to openjdk source, add jaxp and nashorn, use ProblemList.txt from + each testsuite as the exclude list for jtreg, update regex to include + into the tarball failed jcstress tests in the Test.java#id123 format, + create a tarball with the JTreport directory, add guava jar file to + the test classpath. + * debian/excludelist.jdk.jtx, excludelist.langtools.jtx: removed, tests + now rely on the ProblemList.txt exclusion list that is included in-tree + and maintained upstream. + + -- Matthias Klose Tue, 25 Sep 2018 18:14:28 +0200 + +openjdk-11 (11~28-1) unstable; urgency=medium + + * OpenJDK 11 build 27. + + -- Matthias Klose Tue, 04 Sep 2018 14:37:49 +0200 + +openjdk-11 (11~27-1) unstable; urgency=medium + + * OpenJDK 11 build 27. + + -- Matthias Klose Mon, 20 Aug 2018 11:30:22 +0200 + +openjdk-11 (11~24-1) unstable; urgency=medium + + * OpenJDK 11 build 24. + * jhsdb is not available on ia64 and m68k either. + * Update the m68k support (Adrian Glaubitz). Closes: #904204. + + -- Matthias Klose Fri, 27 Jul 2018 05:41:39 +0200 + +openjdk-11 (11~23-1) unstable; urgency=medium + + * OpenJDK 11 build 23. + * Explicitly build-depend on libfontconfig1-dev, explicitly depend + on libfontconfig1. LP: #1780151. + * jhsdb is not available on armel, mipsel and mips64el. Closes: #903631. + * Build using GCC 8. + * Configure with --with-native-debug-symbols=internal. + + -- Matthias Klose Thu, 19 Jul 2018 20:03:05 +0200 + +openjdk-11 (11~22-2) unstable; urgency=medium + + * jhsdb is not available on mips. + + -- Matthias Klose Fri, 13 Jul 2018 07:48:13 +0200 + +openjdk-11 (11~22-1) unstable; urgency=medium + + * OpenJDK 11 build 22. + * jhsdb is not available on powerpc, s390x and x32. + + -- Matthias Klose Thu, 12 Jul 2018 17:00:12 +0200 + +openjdk-11 (11~21-2) unstable; urgency=medium + + * jaotc is only available on amd64 and arm64. + + -- Matthias Klose Sun, 08 Jul 2018 08:22:34 +0200 + +openjdk-11 (11~21-1) unstable; urgency=medium + + * OpenJDK 11 build 21. + * Fix the jre/jdk split again. + + -- Matthias Klose Fri, 06 Jul 2018 07:10:53 +0200 + +openjdk-11 (11~19-1) unstable; urgency=medium + + * OpenJDK 11 build 19. + + -- Matthias Klose Mon, 25 Jun 2018 11:04:39 +0200 + +openjdk-11 (11~18-2) unstable; urgency=medium + + * Fix the parallel build with multiple VM variants. + * Fix installation of the jre binaries. Closes: #901674. + + -- Matthias Klose Tue, 19 Jun 2018 06:17:22 +0200 + +openjdk-11 (11~18-1) unstable; urgency=medium + + * OpenJDK 11 build 18. + * Apply fix to build on sparc64. Closes: #901410. + * Build again the client VM on i386, limiting parallel make to two cores. + + -- Matthias Klose Fri, 15 Jun 2018 14:09:40 +0200 + +openjdk-11 (11~17-2) unstable; urgency=medium + + * Don't build the client VM on i386, fails since build 16. + + -- Matthias Klose Sat, 09 Jun 2018 21:03:00 +0200 + +openjdk-11 (11~17-1) unstable; urgency=medium + + * OpenJDK 11 build 17. + + -- Matthias Klose Fri, 08 Jun 2018 21:14:46 +0200 + +openjdk-11 (11~16-1) unstable; urgency=medium + + * OpenJDK 11 build 16. + + -- Matthias Klose Fri, 01 Jun 2018 13:21:38 +0200 + +openjdk-11 (11~15-1) unstable; urgency=medium + + * OpenJDK 11 build 15. + + -- Matthias Klose Mon, 28 May 2018 10:57:30 +0200 + +openjdk-11 (11~13-2) unstable; urgency=medium + + * Stop shipping the appletviewer binary. + + -- Matthias Klose Sun, 13 May 2018 20:09:17 -0400 + +openjdk-11 (11~13-1) unstable; urgency=medium + + * OpenJDK 11 build 13. + + -- Matthias Klose Sun, 13 May 2018 14:41:09 -0400 + +openjdk-11 (11~12-1) unstable; urgency=medium + + * OpenJDK 11 build 12. + * Fix ftbfs on powerpcspe, adjusting the MIN_FLOAT constant (Adrian Glaubitz). + Addresses: #897334. + * Remove classes.jsa files on package removal. Addresses: #897411. + + -- Matthias Klose Sat, 05 May 2018 17:31:20 +0200 + +openjdk-11 (11~11-2) unstable; urgency=medium + + * Drop the alternative build dependency on OpenJDK 9. + * Fix again the build on x32, not passing -m32 to the compiler. + * Restore parts of the mips-sigset patch which are not yet upstream. + + -- Matthias Klose Sat, 28 Apr 2018 22:17:34 +0200 + +openjdk-11 (11~11-1) unstable; urgency=medium + + * OpenJDK 11 build 11. + * Stop installing the policytool desktop file. LP: #1766843, + + -- Matthias Klose Fri, 27 Apr 2018 08:23:56 +0200 + +openjdk-11 (11~9-1) unstable; urgency=medium + + * OpenJDK 11 build 9. + + [ Tiago Stürmer Daitx ] + * debian/rules: do not compress the element-list api docs as javadoc expects + this file to be uncompressed when using '-link' or '-linkoffline'. + Closes: #895587. + + -- Matthias Klose Sun, 15 Apr 2018 06:36:41 +0200 + +openjdk-11 (11~8-1) unstable; urgency=medium + + * OpenJDK 11 build 8. + * Update the s390x-zEC12 patch. + * Drop obsolete patches. Closes: #895060. + + -- Matthias Klose Sun, 08 Apr 2018 10:58:36 +0200 + +openjdk-11 (11~7-1) unstable; urgency=medium + + * OpenJDK 11 build 7. + * Build using gtk 3.0. + * Add again ia64 support (Adrian Glaubitz). Closes: #894064. + + -- Matthias Klose Mon, 02 Apr 2018 08:56:00 +0200 + +openjdk-11 (11~5-1) unstable; urgency=medium + + * OpenJDK 11 build 5. + * Don't pass -m32/-m64 compiler flags explicitly on architectures not + understanding these (James Cowgill). Closes: #893089. + * Update the zero-x32 patch. + + -- Matthias Klose Thu, 22 Mar 2018 07:46:26 +0800 + +openjdk-11 (11~4-2) unstable; urgency=medium + + * Update apport hook name for 11. LP: #1738579. + + -- Matthias Klose Thu, 15 Mar 2018 14:30:13 +0100 + +openjdk-11 (11~4-1) unstable; urgency=medium + + * OpenJDK 11 build 4. + * Disable the m68k and x32 patches for now (needs an update). + * Build with -fpermissive on armel and armhf for now. + + -- Matthias Klose Thu, 15 Mar 2018 10:30:13 +0100 + +openjdk-10 (10~46-1) unstable; urgency=medium + + * OpenJDK 10 build 46. + * Update patch for m68k (Adrian Glaubitz). Closes: #883570). + * Update patch for alpha (Adrian Glaubitz). Closes: #885018). + * Drop powerpcspe patch. Closes: #883493. + * Work around make-4.2 MAKEFLAGS issue. Closes: #891573. + + -- Matthias Klose Wed, 14 Mar 2018 18:10:28 +0100 + +openjdk-10 (10~32-1) experimental; urgency=medium + + * OpenJDK 10 build 32. + + -- Matthias Klose Sun, 19 Nov 2017 17:52:21 +0100 + +openjdk-9 (9.0.1+11-1) unstable; urgency=medium + + * OpenJDK 9.0.1+11 release. + * Bump standards version. + * Configure with an empty --with-version-pre setting. LP: #1722410. + * Remove JamVM packaging bits. Closes: #877523. + * Remove Shark packaging bits. + * Fix java/javac/jar lockups on SMP Alpha (Michael Cree). Closes: #875288. + * Fix crashes in i386 applications using JNI due to Hotspot workaround for + Exec Shield (Ben Hutchings). Closes: #876069. + * Re-enable building altzero architectures: Closes: #874292. + * Update the zero-sparc patch (Adrian Glaubitz). Closes: #874265. + * Fix recommendation of microhei/zenhei font packages. Closes: #868205. + * Move jmod files into the openjdk-jdk-headless package. Closes: #878272. + + -- Matthias Klose Fri, 27 Oct 2017 01:44:31 +0200 + +openjdk-9 (9~b181-4) unstable; urgency=medium + + * Fix whitespace in debian/rules. Closes: #873104, #873117. + + -- Matthias Klose Thu, 24 Aug 2017 19:15:14 +0200 + +openjdk-9 (9~b181-3) unstable; urgency=medium + + * Fix libjvm.so's .debug file names. + * Install an apport hook when building on Ubuntu and derivatives. + * Update the disable-doclint patch (Chris West). Closes: #866908. + * Configure --with-debug-level=release on m68k as well (Adrian Glaubitz). + Closes: #871316. + * Drop armel and sparc from the list of alternative zero archs (Adrian + Glaubitz). Closes: #871319. + * Simplify the zero-sparc patch (Adrian Glaubitz). Closes: #872756. + * Remove some obsolete unused patches. Closes: #871606. + + -- Matthias Klose Thu, 24 Aug 2017 00:42:22 +0200 + +openjdk-9 (9~b181-2) unstable; urgency=medium + + * Update the jdk-8067331 patch (Adrian Glaubitz). Closes: #871009. + * Build zero on armhf again. + + -- Matthias Klose Mon, 07 Aug 2017 10:28:46 -0400 + +openjdk-9 (9~b181-1) unstable; urgency=medium + + * OpenJDK 9, b181. + * Don't hard-code multiarch-support dependency. Closes: #870521. + * Just configure m68k --with-debug-level=slowdebug. Closes: #868255. + * Fix atomic_copy64 on powerpc (Andrew Haley). Closes: #870403. + + -- Matthias Klose Fri, 04 Aug 2017 07:35:49 -0400 + +openjdk-9 (9~b179-2) unstable; urgency=medium + + * Really configure --with-debug-level=slowdebug on Zero-only architectures. + Closes: #868255. + * Really enable the zero-sparc patch (Adrian Glaubitz). Closes: #864359. + * Try again building zero on arm64 with slowdebug. + + -- Matthias Klose Mon, 24 Jul 2017 13:20:10 +0200 + +openjdk-9 (9~b179-1) unstable; urgency=medium + + * OpenJDK 9, b179. + * Drop armel as a hotspot architecture. Closes: #864464. + * Configure --with-debug-level=slowdebug on Zero-only architectures. + Closes: #868255. + * Fix recommendation of microhei/zenhei font packages. Closes: #868205. + * Enable the zero-sparc patch (Adrian Glaubitz). Closes: #864359. + * Update the disable-doclint patch (Chris West). Closes: #866908. + * Disable the jamvm autopkg tests. + + -- Matthias Klose Sat, 22 Jul 2017 11:49:18 +0200 + +openjdk-9 (9~b177-3) unstable; urgency=medium + + * Fix applying the s390x-thread-stack-size patch. + + -- Matthias Klose Fri, 07 Jul 2017 19:18:19 +0200 + +openjdk-9 (9~b177-2) unstable; urgency=medium + + * Try to build zero again on amd64, arm64, ppc64el and s390x. + * Keep the conf/* symlinks in the JAVA_HOME directory. + Closes: #866924, #863080. + * Drop armel from the list of hotspot architectures. See #864464. + * Stop using deprecated GNOME libraries. Closes: #850268. + * Apply sparc64 build fixes (Adrian Glaubitz). Closes: #864351. + * Update the zero-sparc patch (Adrian Glaubitz). Closes: #864359. + * Update the m68k-support patch (Adrian Glaubitz). Closes: #864595. + * Disable generation of jvmti.html on m68k (Adrian Glaubitz). + Closes: #864596. + * Update the zero-sh patch (Adrian Glaubitz). Closes: #864643. + * Update the jdk-target-arch-define patch. Closes: #865129. + * Provide jvmdir symlink in /usr/lib/debug. Addresses: #867314. + * Fix pt_BR translation in awt message. Addresses: #863331. + * Drop the 8073754-stack-overflow-9-build patch. Closes: #864288. + * Use sigset_t to store the signals used by the JVM (James Cowgill). + Closes: #841173. + + -- Matthias Klose Fri, 07 Jul 2017 12:28:53 +0200 + +openjdk-9 (9~b177-1) unstable; urgency=medium + + * OpenJDK 9, b177. + + -- Matthias Klose Fri, 07 Jul 2017 02:18:33 +0000 + +openjdk-9 (9~b170-2) unstable; urgency=medium + + * OpenJDK 9, b170. + + -- Matthias Klose Thu, 18 May 2017 11:57:43 -0700 + +openjdk-9 (9~b169-1) unstable; urgency=medium + + * OpenJDK 9, b169. + + -- Matthias Klose Sun, 14 May 2017 10:11:24 -0700 + +openjdk-9 (9~b168-1) unstable; urgency=medium + + * OpenJDK 9, b168. + + -- Matthias Klose Fri, 05 May 2017 14:33:09 +0200 + +openjdk-9 (9~b164-1) unstable; urgency=medium + + * OpenJDK 9, b164. + + -- Matthias Klose Sat, 08 Apr 2017 21:39:41 +0200 + +openjdk-9 (9~b161-1) unstable; urgency=medium + + * OpenJDK 9, b161. + * Don't build the zero JRE on Ubuntu/s390x. + * Fix changelog format. + + -- Matthias Klose Fri, 17 Mar 2017 00:09:34 +0100 + +openjdk-9 (9~b159-1) unstable; urgency=medium + + * OpenJDK 9, b159. + + -- Matthias Klose Fri, 03 Mar 2017 19:03:10 +0100 + +openjdk-9 (9~b158-1) unstable; urgency=medium + + * OpenJDK 9, b158. + * Add OpenJDK Stack Unwinder and Frame Decorator for gdb. + + -- Matthias Klose Sun, 26 Feb 2017 18:57:42 +0100 + +openjdk-9 (9~b155-1) unstable; urgency=medium + + * OpenJDK 9, b155. + + -- Matthias Klose Fri, 03 Feb 2017 07:56:11 +0100 + +openjdk-9 (9~b154-1) unstable; urgency=medium + + * OpenJDK 9, b154. + * Fix libjpeg dependency. Closes: #852420. + + -- Matthias Klose Thu, 26 Jan 2017 23:33:55 +0100 + +openjdk-9 (9~b153-2) unstable; urgency=medium + + * Lower cpu requirements for Debian/s390x. + + -- Matthias Klose Sat, 21 Jan 2017 21:52:52 +0100 + +openjdk-9 (9~b153-1) unstable; urgency=medium + + * OpenJDK 9, b153. + + -- Matthias Klose Fri, 20 Jan 2017 14:39:18 +0100 + +openjdk-9 (9~b151-2) unstable; urgency=medium + + * Fix builds with zero and jamvm as an alternate VM. + + -- Matthias Klose Tue, 10 Jan 2017 15:40:20 +0100 + +openjdk-9 (9~b151-1) experimental; urgency=medium + + * OpenJDK 9, b151. + + -- Matthias Klose Sun, 08 Jan 2017 23:16:21 +0100 + +openjdk-9 (9~b149-1) experimental; urgency=medium + + * OpenJDK 9, b149. + + -- Matthias Klose Sat, 17 Dec 2016 10:58:22 +0100 + +openjdk-9 (9~b148-1) experimental; urgency=medium + + * OpenJDK 9, b148. + + -- Matthias Klose Mon, 12 Dec 2016 14:04:02 +0000 + +openjdk-9 (9~b147-1) experimental; urgency=medium + + * OpenJDK 9, b147. + * Use sigset_t to store the signals used by the JVM (James Cowgill). + Addresses: #841173. + + -- Matthias Klose Sat, 03 Dec 2016 15:41:51 +0100 + +openjdk-9 (9~b144-1) experimental; urgency=medium + + * OpenJDK 9, b144. + + -- Matthias Klose Fri, 11 Nov 2016 14:43:48 +0100 + +openjdk-9 (9~b143-2) experimental; urgency=medium + + * Fix 8168567, unbreaking the build on arm64. + + -- Matthias Klose Mon, 07 Nov 2016 15:46:43 +0100 + +openjdk-9 (9~b143-1) experimental; urgency=medium + + * OpenJDK 9, b143. + + -- Matthias Klose Sun, 06 Nov 2016 22:36:28 +0100 + +openjdk-9 (9~b142-1) experimental; urgency=medium + + * OpenJDK 9, b142. + + -- Matthias Klose Sat, 29 Oct 2016 12:03:19 +0200 + +openjdk-9 (9~b140-2) experimental; urgency=medium + + * Don't build zero on ppc64 and ppc64el (fails to build). + + -- Matthias Klose Wed, 19 Oct 2016 17:02:37 +0200 + +openjdk-9 (9~b140-1) experimental; urgency=medium + + * OpenJDK 9, b140. + + -- Matthias Klose Mon, 17 Oct 2016 12:01:47 +0200 + +openjdk-9 (9~b139-1) experimental; urgency=medium + + * OpenJDK 9, b139. + * Stop building zero on amd64, fails to build with hardening defaults. + + -- Matthias Klose Sun, 09 Oct 2016 10:03:18 +0200 + +openjdk-9 (9~b136-1ubuntu1) yakkety; urgency=medium + + * 8165323: (fs) Files.getFileStore fails with "Mount point not found" in + chroot environment + + -- Matthias Klose Wed, 21 Sep 2016 16:20:45 +0200 + +openjdk-9 (9~b136-1) experimental; urgency=medium + + * OpenJDK 9, b136. + + -- Matthias Klose Mon, 19 Sep 2016 20:33:07 +0200 + +openjdk-9 (9~b135-1) experimental; urgency=medium + + * OpenJDK 9, b135. + + -- Matthias Klose Sat, 10 Sep 2016 03:56:51 +0200 + +openjdk-9 (9~b134-2ubuntu1) yakkety; urgency=medium + + * Explicitly turn off stack-protector for zero builds. + + -- Matthias Klose Thu, 08 Sep 2016 17:21:13 +0200 + +openjdk-9 (9~b134-2) experimental; urgency=medium + + * Build using GCC 6. + * Enable zero build on arm64 and ppc64el. + * Increase thread stack size for ppc* zero builds. + * Don't use Solaris compiler flags on sparc64. + * Port x32 zero patch. + * Don't use the just built jdk for zero builds. + * Don't use getFileStore() during the build, chroots throw an + exception while running jlink. + * Fix removal of jre-headless alternatives. Closes: #788445. + + -- Matthias Klose Mon, 05 Sep 2016 14:14:01 +0200 + +openjdk-9 (9~b133-2) experimental; urgency=medium + + * Don't do bootcycle builds for zero builds. + * Fix macro settings for zero builds. + + -- Matthias Klose Wed, 31 Aug 2016 18:34:51 +0200 + +openjdk-9 (9~b133-1) experimental; urgency=medium + + * OpenJDK 9, b133. + + -- Matthias Klose Mon, 29 Aug 2016 14:25:48 +0200 + +openjdk-9 (9~b130-1) experimental; urgency=medium + + * OpenJDK 9, b130. + + -- Matthias Klose Sun, 07 Aug 2016 23:27:51 +0200 + +openjdk-9 (9~b124-1) experimental; urgency=medium + + * OpenJDK 9, b124. + * Fix an issue with libatk-wrapper (Samuel Thibault). Closes: #827796. + + -- Matthias Klose Sat, 28 May 2016 22:30:12 +0200 + +openjdk-9 (9~b117-1) experimental; urgency=medium + + * OpenJDK 9, b117. + * Fix zero builds, next try. + + -- Matthias Klose Thu, 05 May 2016 23:10:57 +0200 + +openjdk-9 (9~b116-1) experimental; urgency=medium + + * OpenJDK 9, b116. + + -- Matthias Klose Fri, 29 Apr 2016 00:41:04 +0200 + +openjdk-9 (9~b115-2) experimental; urgency=medium + + * Fix zero builds: + - Backport 8132051, 8146518, 8150654, 8154210 from the hs repo. + - Apply proposed patch for 8153275. + * Set initial VMThreadStackSize to 1600 on s390x. + * Tighten openjdk build dependency on s390x. + + -- Matthias Klose Sat, 23 Apr 2016 23:09:19 +0200 + +openjdk-9 (9~b115-1) experimental; urgency=medium + + * OpenJDK 9, b115. + * Fix header file conflict. Closes: #816440. LP: #1550950. + + -- Matthias Klose Thu, 21 Apr 2016 23:48:04 +0200 + +openjdk-9 (9~b114-0ubuntu1) xenial; urgency=medium + + * OpenJDK 9, b114. + + -- Matthias Klose Thu, 14 Apr 2016 21:02:34 +0200 + +openjdk-9 (9~b113-1) experimental; urgency=medium + + * OpenJDK 9, b113. + + -- Matthias Klose Wed, 13 Apr 2016 20:58:18 +0200 + +openjdk-9 (9~b112-3) experimental; urgency=medium + + * Fix zero builds, apply proposed patch for JDK-8153275. + + -- Matthias Klose Fri, 01 Apr 2016 18:39:09 +0200 + +openjdk-9 (9~b112-2) experimental; urgency=medium + + * OpenJDK 9, b112. + + -- Matthias Klose Thu, 31 Mar 2016 15:44:43 +0200 + +openjdk-9 (9~b107-1) experimental; urgency=medium + + * OpenJDK 9, b107. + * Build-depend on openjdk-9-jdk-headless . + * Build with GCC 5 on mips*. + * Split out an openjdk-9-jdk-headless package. + * Update libgconf/libgnome jre recommendations. Addresses: #813943. + * Update package reference in README. Addresses: #814605. + * Add french translation for policytool desktop file. Addresses: #813851. + * Install app icons again. + + -- Matthias Klose Sat, 27 Feb 2016 11:55:04 +0100 + +openjdk-9 (9~b102-1) experimental; urgency=medium + + * OpenJDK 9, b102. + + -- Matthias Klose Tue, 26 Jan 2016 13:33:16 +0100 + +openjdk-9 (9~b101-2ubuntu2) xenial; urgency=medium + + * Don't build zero on arm64. + + -- Matthias Klose Sun, 17 Jan 2016 11:17:19 +0100 + +openjdk-9 (9~b101-2ubuntu1) xenial; urgency=medium + + * Ignore installing jsadebugd.1. + + -- Matthias Klose Sun, 17 Jan 2016 10:33:06 +0100 + +openjdk-9 (9~b101-2) experimental; urgency=medium + + * Disable the zero build on ppc64el, currently fails to build. + + -- Matthias Klose Sat, 16 Jan 2016 10:30:18 +0100 + +openjdk-9 (9~b101-1) experimental; urgency=medium + + * OpenJDK 9, b101. + * Fix cross builds. + * Build again using GCC 4.9 on mips*, fails to build with GCC 5. + + -- Matthias Klose Fri, 15 Jan 2016 12:25:14 +0100 + +openjdk-9 (9~b96-1) experimental; urgency=medium + + * OpenJDK 9, b96. + * openjdk-9-jdk: Fix typo in sdk provides. Addresses: #803150. + * Build using giflib 5. + * Build using GCC 5 everywhere. + + -- Matthias Klose Sun, 13 Dec 2015 17:45:17 +0100 + +openjdk-9 (9~b94-1) experimental; urgency=medium + + * OpenJDK 9, b94. + * Update configury for sparc64 (Steven Chamberlain). Addresses: #806202. + * Fix stripping packages (use bash instead of expr substring). + + -- Matthias Klose Tue, 01 Dec 2015 11:05:27 +0100 + +openjdk-9 (9~b88-1) experimental; urgency=medium + + * OpenJDK 9, b88. + + -- Matthias Klose Sun, 25 Oct 2015 02:38:14 +0200 + +openjdk-9 (9~b87-2) wily; urgency=medium + + * Prefer openjdk-8-jdk for the build. + + -- Matthias Klose Tue, 20 Oct 2015 14:21:25 +0200 + +openjdk-9 (9~b87-1) experimental; urgency=medium + + * OpenJDK 9, b87. + * Build the client hotspot on i386. + + -- Matthias Klose Mon, 19 Oct 2015 17:58:08 +0200 + +openjdk-9 (9~b80-2) experimental; urgency=medium + + * Fix build for armel, armhf and "unknown" zero architectures. + * Fix build error on AArch64. + + -- Matthias Klose Sat, 05 Sep 2015 20:16:45 +0200 + +openjdk-9 (9~b80-1) experimental; urgency=medium + + * OpenJDK 9, b80. + * Fix installing the openjdk.desktop file when cautious-launch is available. + * Define _alpha_ / _sh_ preprocessor macros instead of alpha / sh. + * Re-enable the atk bridge for releases with a fixed atk bridge. + * Make derivatives builds the same as the parent distro. + * Add m68k support for Zero (Andreas Schwab). + + -- Matthias Klose Fri, 04 Sep 2015 19:27:56 +0200 + +openjdk-9 (9~b74-1) experimental; urgency=medium + + * OpenJDK 9, b74. + * Fix jdk build on x32. + * JDK-8073754, increase stack size limits on powerpc and ppc64. + * Configure --with-boot-jdk-jvmargs="-XX:ThreadStackSize=2240" on + powerpc and ppc64. + + -- Matthias Klose Mon, 27 Jul 2015 20:43:48 +0200 + +openjdk-9 (9~b71-1) experimental; urgency=medium + + * OpenJDK 9, b71. + * openjdk-9-jre: Recommend the real libgconf2-4 and libgnome2-0 packages. + Addresses: #786594. + + -- Matthias Klose Mon, 06 Jul 2015 17:29:39 +0200 + +openjdk-9 (9~b68-4) experimental; urgency=medium + + * Fix 32bit detection for the build jdk; try to build again for mips + and mipsel (James Cowgill). + * openjdk-jre-headless: Add dependency on the package containing the + mountpoint binary. + + -- Matthias Klose Mon, 22 Jun 2015 22:09:17 +0200 + +openjdk-9 (9~b68-3) experimental; urgency=medium + + * Enable bootcycle zero builds everywhere. + * Re-enable running the testsuite. + + -- Matthias Klose Thu, 18 Jun 2015 23:55:33 +0200 + +openjdk-9 (9~b68-2) experimental; urgency=medium + + * Fix 8080684, PPC64 little-endian build. + * Fix installation of zero based builds. + + -- Matthias Klose Wed, 17 Jun 2015 19:03:31 +0200 + +openjdk-9 (9~b68-1) experimental; urgency=medium + + * OpenJDK 9, b68. + * Fix the build on AArch64 (Ed Nevill). + + -- Matthias Klose Tue, 16 Jun 2015 11:39:02 +0200 + +openjdk-9 (9~b64-1) experimental; urgency=medium + + * OpenJDK 9, b64. + * Fix build error in zero. + + -- Matthias Klose Mon, 18 May 2015 17:30:20 +0200 + +openjdk-8 (8u45-b14-2) unstable; urgency=medium + + * Fix JamVM with 8u45. Closes: #766284. + + -- Matthias Klose Sun, 10 May 2015 19:28:41 +0200 + +openjdk-8 (8u45-b14-1) unstable; urgency=medium + + * Update to 8u45-b14. + * Update AArch64 to (post) 8u45-b14. + * Make libnss3-dev installable on precise (Thorsten Glaser). LP: #1411630. + * Only install the openjdk-java.desktop file when using cautious-launcher. + + -- Matthias Klose Sun, 19 Apr 2015 16:31:44 +0200 + +openjdk-8 (8u40-b27-1) unstable; urgency=medium + + * Update to 8u40-b27. + * Update AArch64 to (post) 8u40-b25. + * Fix libjavajpeg build using the system jpeg library. Closes: #760926. + + -- Matthias Klose Tue, 17 Mar 2015 01:19:45 +0100 + +openjdk-8 (8u40~b22-1ubuntu1) vivid; urgency=medium + + * Update AArch64 to 8u40-b22. + * Update the alpha float patch. + * Fix JDK-8067330, ZERO_ARCHDEF incorrectly defined for PPC/PPC64 + architectures. + * Fix JDK-8067331, Zero: Atomic::xchg and Atomic::xchg_ptr need + full memory barrier. + * Build using OpenJDK-8. + + -- Matthias Klose Tue, 27 Jan 2015 14:59:00 +0100 + +openjdk-8 (8u40~b22-1) unstable; urgency=medium + + * Update to 8u40-b22. + * Fix build on mips64 and mips64el. Closes: #776295. + * Don't strip libjvm.so to prevent rejection by ftp-master (work around, + but no fix in the archive). Addresses: #775760. + * Fix jamvm to work with recent security updates. Closes: #766284. + + -- Matthias Klose Mon, 26 Jan 2015 16:59:37 +0100 + +openjdk-8 (8u40~b21-1) unstable; urgency=medium + + * Update to 8u40-b21. + + -- Matthias Klose Thu, 15 Jan 2015 12:14:18 +0100 + +openjdk-8 (8u40~b10-1) unstable; urgency=medium + + * Fix libjpeg runtime dependency. + + -- Matthias Klose Thu, 16 Oct 2014 08:38:13 +0200 + +openjdk-8 (8u40~b09-1) unstable; urgency=medium + + * Update to 8u40-b09. + * Update the AArch64 hotspot to 8u40-b09. + * Allow to build for Ubuntu 12.04 LTS. + * Change B-D to libjpeg-dev to finish the transition to libjpeg-turbo + (Ondřej Surý). Closes: #763490. + * Backport the fix for 8017773 OpenJDK returns incorrect TrueType + font metrics. Closes: #762323. + * Depend on libnss3 instead of libnss3-1d for recent releases. + Addresses: #760122. + + -- Matthias Klose Tue, 14 Oct 2014 12:39:18 +0200 + +openjdk-8 (8u40~b04-2) unstable; urgency=medium + + * Remove AArch64 patch applied upstream. + * Update the kfresbsd jdk patch, still not forwarded upstream. + + -- Matthias Klose Tue, 09 Sep 2014 17:08:32 +0200 + +openjdk-8 (8u40~b04-1) experimental; urgency=medium + + * Update to 8u40-b04. + * Backport 8050942, implement template interpreter for ppc64le. + * Build-depend on systemtap-sdt-dev. + + -- Matthias Klose Wed, 03 Sep 2014 21:11:27 +0200 + +openjdk-8 (8u20-b26-1) experimental; urgency=medium + + * 8u20 build 26 is the final 8u20 release. + * Update the AArch64 hotspot. + * Fix applying the kfreebsd patch for JamVM. + * x32 build fixes. + * Allow openjdk-8-jdk as an alternative build dependency. + * Adjust timeouts for jtreg runs. + + -- Matthias Klose Wed, 20 Aug 2014 10:34:55 +0200 + +openjdk-8 (8u20~b26-1) experimental; urgency=medium + + * Update to 8u20-b26. + * Update to JamVM 2.0.0. + * Update to IcedTea-Sound 1.0.1. + * Update toplevel configury to recognize zero archs alpha, mips*, + m68k, sh4. + * Update kfreebsd-support patches (Steven Chamberlain). + * Fix an uninitialized memory issue in adlc (Fridrich Strba). + * Move libjavagtk into the -jre package. + * Use the system libpcsclite library. + * Fix typo, ignoring boot cycle builds (Emmanuel Bourg). + * Derive the update version and the build number from the package + version (Emmanuel Bourg). + * Call quilt with --quiltrc -. Closes: #755710. + * openjdk-8-jdk: Fix src.zip symlink. Closes: #755869. + + -- Matthias Klose Thu, 31 Jul 2014 19:51:35 +0200 + +openjdk-8 (8u20~b20-2) experimental; urgency=medium + + * Work around OpenJDK's build system which is not robust enough + to accept commas in *FLAGS. + * Pass extra flags for non-hotspot builds. + * Fix the zero build on i386. + * Don't add extra symlinks for the jni_{md,jawt}.h header files. + + -- Matthias Klose Fri, 11 Jul 2014 20:30:54 +0200 + +openjdk-8 (8u20~b20-1) experimental; urgency=medium + + * Initial OpenJDK 8 packaging, based on 8u20-b20. + * Fix hotspot build system for GNU make 4.0 (Emmanuel Bourg). + * Drop rhino (build) dependencies (Emmanuel Bourg). + * Add java8 provides (Emmanuel Bourg). + * Add IcedTea patches to build with external jpeg, png and lcms + libraries (Emmanuel Bourg). + * Add keywords to the desktop files (Emmanuel Bourg). + * Remove the suggested dependency on sun-java6-fonts ((Emmanuel Bourg). + * Build hotspot on ppc64 and ppc64el. + * Add the IcedTea Sound tarball. + * Don't strip files when building the images. + * Update patches to pass the extra flags to the libsig and libsaproc builds. + * Use dh_strip's knowledge about build ids when available. + + -- Matthias Klose Wed, 09 Jul 2014 20:11:18 +0200 + +openjdk-7 (7u55-2.4.7-2) unstable; urgency=medium + + * Fix the quoting of configure flags for the zero build. + * Update the java-access-bridge-security patch (Raphael Geissert). + * Don't hard code the compiler names in the AArch64 hotspot build. + * Build using GCC 4.9 where available. + * Add MIPS64(el) support (Yunqiang Su). Closes: #746207. + * Suggest fonts-indic instead of ttf-indic-fonts. Closes: #747694. + + -- Matthias Klose Fri, 16 May 2014 19:12:42 +0200 + +openjdk-7 (7u55-2.4.7-1) unstable; urgency=high + + * IcedTea7 2.4.7 release. + * Security fixes + - S8023046: Enhance splashscreen support. + - S8025005: Enhance CORBA initializations. + - S8025010, CVE-2014-2412: Enhance AWT contexts. + - S8025030, CVE-2014-2414: Enhance stream handling. + - S8025152, CVE-2014-0458: Enhance activation set up. + - S8026067: Enhance signed jar verification. + - S8026163, CVE-2014-2427: Enhance media provisioning. + - S8026188, CVE-2014-2423: Enhance envelope factory. + - S8026200: Enhance RowSet Factory. + - S8026716, CVE-2014-2402: (aio) Enhance asynchronous channel handling. + - S8026736, CVE-2014-2398: Enhance Javadoc pages. + - S8026797, CVE-2014-0451: Enhance data transfers. + - S8026801, CVE-2014-0452: Enhance endpoint addressing. + - S8027766, CVE-2014-0453: Enhance RSA processing. + - S8027775: Enhance ICU code. + - S8027841, CVE-2014-0429: Enhance pixel manipulations. + - S8028385: Enhance RowSet Factory. + - S8029282, CVE-2014-2403: Enhance CharInfo set up. + - S8029286: Enhance subject delegation. + - S8029699: Update Poller demo. + - S8029730: Improve audio device additions. + - S8029735: Enhance service mgmt natives. + - S8029740, CVE-2014-0446: Enhance handling of loggers. + - S8029745, CVE-2014-0454: Enhance algorithm checking. + - S8029750: Enhance LCMS color processing (LCMS 2 only). + - S8029760, CVE-2013-6629: Enhance AWT image libraries (in-tree libjpeg). + - S8029844, CVE-2014-0455: Enhance argument validation. + - S8029854, CVE-2014-2421: Enhance JPEG decodings. + - S8029858, CVE-2014-0456: Enhance array copies. + - S8030731, CVE-2014-0460: Improve name service robustness. + - S8031330: Refactor ObjectFactory. + - S8031335, CVE-2014-0459: Better color profiling. + - S8031352, CVE-2013-6954: Enhance PNG handling (in-tree libpng). + - S8031394, CVE-2014-0457: (sl) Fix exception handling in ServiceLoader. + - S8031395: Enhance LDAP processing. + - S8032686, CVE-2014-2413: Issues with method invoke. + - S8033618, CVE-2014-1876: Correct logging output. + - S8034926, CVE-2014-2397: Attribute classes properly. + - S8036794, CVE-2014-0461: Manage JavaScript instances. + * AArch64 fixes. + + -- Matthias Klose Wed, 16 Apr 2014 15:37:40 +0200 + +openjdk-7 (7u51-2.4.6-1) unstable; urgency=medium + + * IcedTea7 2.4.6 release. + * Explicitly use AC_MAINTAINER_MODE and automake-1.11 to create the + debian .orig tarball. Addresses: #740289. + * Apply patch from upstream to fix bold fonts in Swing applications using + GTK L&F (Ryan Tandy). LP: #937200. + * Explicitly build-depend on libkrb5-dev. + * On AArch64 don't use the hotsport backport for the zero build. + + -- Matthias Klose Tue, 01 Apr 2014 09:25:19 +0200 + +openjdk-7 (7u51-2.4.6~pre1-1) unstable; urgency=medium + + * IcedTea7 2.4.6 prerelease. + * Fix icedtea-web build failure on kfreebsd-* (unable to find + sun.security.util.SecurityConstants). Steven Chamberlain. Closes: #739032. + * Update the AArch64 Hotspot. + + -- Matthias Klose Thu, 27 Mar 2014 17:24:45 +0100 + +openjdk-7 (7u51-2.4.5-2) unstable; urgency=medium + + * Update the KFreeBSD patch (Steven Chamberlain). Closes: #736291. + + -- Matthias Klose Tue, 04 Feb 2014 13:28:10 +0100 + +openjdk-7 (7u51-2.4.5-1) unstable; urgency=medium + + * IcedTea7 2.4.5 release. + * Build Hotspot client and server vms for AArch64. + + -- Matthias Klose Fri, 31 Jan 2014 06:13:20 -0500 + +openjdk-7 (7u51-2.4.4-1) unstable; urgency=medium + + * IcedTea7 2.4.4 release. + * Security fixes + - S6727821: Enhance JAAS Configuration. + - S7068126, CVE-2014-0373: Enhance SNMP statuses. + - S8010935: Better XML handling. + - S8011786, CVE-2014-0368: Better applet networking. + - S8021257, S8025022, CVE-2013-5896 : com.sun.corba.se.** should be + on restricted package list. + - S8021271, S8021266, CVE-2014-0408: Better buffering in ObjC code. + - S8022904: Enhance JDBC Parsers. + - S8022927: Input validation for byte/endian conversions. + - S8022935: Enhance Apache resolver classes. + - S8022945: Enhance JNDI implementation classes. + - S8023057: Enhance start up image display. + - S8023069, CVE-2014-0411: Enhance TLS connections. + - S8023245, CVE-2014-0423: Enhance Beans decoding. + - S8023301: Enhance generic classes. + - S8023338: Update jarsigner to encourage timestamping. + - S8023672: Enhance jar file validation. + - S8024302: Clarify jar verifications. + - S8024306, CVE-2014-0416: Enhance Subject consistency. + - S8024530: Enhance font process resilience. + - S8024867: Enhance logging start up. + - S8025014: Enhance Security Policy. + - S8025018, CVE-2014-0376: Enhance JAX-P set up. + - S8025026, CVE-2013-5878: Enhance canonicalization. + - S8025034, CVE-2013-5907: Improve layout lookups. + - S8025448: Enhance listening events. + - S8025758, CVE-2014-0422: Enhance Naming management. + - S8025767, CVE-2014-0428: Enhance IIOP Streams. + - S8026172: Enhance UI Management. + - S8026176: Enhance document printing. + - S8026193, CVE-2013-5884: Enhance CORBA stub factories. + - S8026204: Enhance auth login contexts. + - S8026417, CVE-2013-5910: Enhance XML canonicalization. + - S8026502: java/lang/invoke/MethodHandleConstants.java fails on all + platforms. + - S8027201, CVE-2014-0376: Enhance JAX-P set up. + - S8029507, CVE-2013-5893: Enhance JVM method processing. + - S8029533: REGRESSION: closed/java/lang/invoke/8008140/Test8008140.java + fails agains. + * Remove alpha from stage1_gcj_archs. + * Use the langtools and jdk tarballs as provided by IcedTea. + * Hotspot is dead on sparc. Build the zero interpreter as the default. + * Blindly update the KF***BSD patches. + + -- Matthias Klose Wed, 15 Jan 2014 10:34:34 +0100 + +openjdk-7 (7u45-2.4.3-5) unstable; urgency=medium + + * Run the jtreg tests on powerpcspe, tested by Roland Stigge. + * Fix zero builds on 64k page kernel configs. + * Fix more IcedTea bits to build on x32. + + -- Matthias Klose Sat, 11 Jan 2014 13:55:34 +0100 + +openjdk-7 (7u45-2.4.3-4) unstable; urgency=low + + * Re-enable running the testsuite on powerpc. + * Run the testsuite on AArch64. + * Fix IcedTea bits to build on x32. + + -- Matthias Klose Sun, 22 Dec 2013 21:20:10 +0100 + +openjdk-7 (7u45-2.4.3-3) unstable; urgency=low + + * Don't build on s390 anymore. + * Update hotspot-mips-align patch (Aurelien Jarno). Closes: #732528). + * Build for ppc64el. + * Try to build zero on x32. + * Configure with --enable-zero on sparc and sparc64. + + -- Matthias Klose Fri, 20 Dec 2013 14:42:38 +0100 + +openjdk-7 (7u45-2.4.3-2.3) unstable; urgency=medium + + * Disable bootstrap build on alpha. Closes: #719671. + * Disable running the jdk jtreg tests on the hotspot architectures. + Hanging on the buildds. + * Re-enable the jexec patch, program logic confused by running jexec + outside the assumed java home. Closes: #731961. + * Don't apply the s390 patches on s390x. s390 is successfully dead. + * Fix zero builds on little endian architectures, taken from the trunk. + + -- Matthias Klose Thu, 12 Dec 2013 18:24:44 +0100 + +openjdk-7 (7u45-2.4.3-1) unstable; urgency=medium + + * IcedTea7 2.4.3 release. + * Security fixes: + - S8006900, CVE-2013-3829: Add new date/time capability. + - S8008589: Better MBean permission validation. + - S8011071, CVE-2013-5780: Better crypto provider handling. + - S8011081, CVE-2013-5772: Improve jhat. + - S8011157, CVE-2013-5814: Improve CORBA portablility. + - S8012071, CVE-2013-5790: Better Building of Beans. + - S8012147: Improve tool support. + - S8012277: CVE-2013-5849: Improve AWT DataFlavor. + - S8012425, CVE-2013-5802: Transform TransformerFactory. + - S8013503, CVE-2013-5851: Improve stream factories. + - S8013506: Better Pack200 data handling. + - S8013510, CVE-2013-5809: Augment image writing code. + - S8013514: Improve stability of cmap class. + - S8013739, CVE-2013-5817: Better LDAP resource management. + - S8013744, CVE-2013-5783: Better tabling for AWT. + - S8014085: Better serialization support in JMX classes. + - S8014093, CVE-2013-5782: Improve parsing of images. + - S8014098: Better profile validation. + - S8014102, CVE-2013-5778: Improve image conversion. + - S8014341, CVE-2013-5803: Better service from Kerberos servers. + - S8014349, CVE-2013-5840: (cl) Class.getDeclaredClass problematic + in some class loader configurations. + - S8014530, CVE-2013-5825: Better digital signature processing. + - S8014534: Better profiling support. + - S8014987, CVE-2013-5842: Augment serialization handling. + - S8015614: Update build settings. + - S8015731: Subject java.security.auth.subject to improvements. + - S8015743, CVE-2013-5774: Address internet addresses. + - S8016256: Make finalization final. + - S8016653, CVE-2013-5804: javadoc should ignore ignoreable characters + in names. + - S8016675, CVE-2013-5797: Make Javadoc pages more robust. + - S8017196, CVE-2013-5850: Ensure Proxies are handled appropriately. + - S8017287, CVE-2013-5829: Better resource disposal. + - S8017291, CVE-2013-5830: Cast Proxies Aside. + - S8017298, CVE-2013-4002: Better XML support. + - S8017300, CVE-2013-5784: Improve Interface Implementation. + - S8017505, CVE-2013-5820: Better Client Service. + - S8019292: Better Attribute Value Exceptions. + - S8019617: Better view of objects. + - S8020293: JVM crash. + - S8021275, CVE-2013-5805: Better screening for ScreenMenu. + - S8021282, CVE-2013-5806: Better recycling of object instances. + - S8021286: Improve MacOS resourcing. + - S8021290, CVE-2013-5823: Better signature validation. + - S8022931, CVE-2013-5800: Enhance Kerberos exceptions. + - S8022940: Enhance CORBA translations. + - S8023683: Enhance class file parsing. + * Fix build failure on mips* (Aurelien Jarno). Closes: #729448). + * Run autoreconf. Closes: #724083. + * Merge the -jre-lib package into -jre-headless. Simplifies the packaging + and the savings were not as big as wanted, because the rt.jar is still + architecture dependant. Closes: #641049, #722510. + + -- Matthias Klose Sun, 08 Dec 2013 23:22:06 +0100 + +openjdk-7 (7u25-2.3.12-4ubuntu3) saucy; urgency=low + + * Apply missing patch to fix arm64/AArch64 detection. + + -- Matthias Klose Fri, 11 Oct 2013 17:51:33 +0200 + +openjdk-7 (7u25-2.3.12-4ubuntu2) saucy; urgency=low + + * openjdk-jre-headless: Loosen the dependency on -jre-lib. + + -- Matthias Klose Wed, 09 Oct 2013 16:29:15 +0200 + +openjdk-7 (7u25-2.3.12-4ubuntu1) saucy; urgency=low + + * Regenerate the control file. + + -- Matthias Klose Fri, 16 Aug 2013 12:09:47 +0200 + +openjdk-7 (7u25-2.3.12-4) unstable; urgency=low + + * Add the hotspot patches for AArch64, which apparently were not + included in the IcedTea release by intent. + * Don't interpret arm64 as an ARM architecture, but as AArch64. So + much for Debian calling this port arm64 ... + * Use host macros instead of build macros for corba and hotspot config. + * Re-add multiarch library directories to the default library path. + Closes: #712567. + * Enable the two-stage build on alpha. Closes: #719671. + * Build for powerpcspe (Roland Stigge). Closes: #712686. + * Recommend fonts-dejavu-extra instead of ttf-dejavu-extra for current + releases. Closes: #718839. + + -- Matthias Klose Thu, 15 Aug 2013 21:26:51 +0200 + +openjdk-7 (7u25-2.3.12-3) unstable; urgency=low + + * Fix kFreeBSD builds (Thanks to Christoph Egger for his help). + + -- Damien Raude-Morvan Mon, 12 Aug 2013 00:39:41 +0200 + +openjdk-7 (7u25-2.3.12-2) unstable; urgency=low + + [ Matthias Klose ] + * Regenerate the hotspot-s390 patch. + + [ Damien Raude-Morvan ] + * Update kfreebsd patches. + + -- Matthias Klose Sat, 03 Aug 2013 20:22:41 +0200 + +openjdk-7 (7u25-2.3.12-1) unstable; urgency=low + + * IcedTea7 2.3.12 release. + * Don't build with pulseaudio on arm64. + * Disable bootstraped build on s390 and sparc. + + -- Matthias Klose Fri, 02 Aug 2013 15:55:01 +0200 + +openjdk-7 (7u25-2.3.10-2ubuntu1) saucy; urgency=low + + * Regenerate the control file. + + -- Matthias Klose Mon, 15 Jul 2013 23:59:45 +0200 + +openjdk-7 (7u25-2.3.10-2) unstable; urgency=low + + [ Matthias Klose ] + * Fix gcj-jdk build dependency on ia64 and s390. + * Build zero on arm64. + + [ Gianfranco Costamagna ] + * Fix build failure on kfreebsd (Closes: #714528) + + -- Matthias Klose Sun, 30 Jun 2013 17:12:28 +0200 + +openjdk-7 (7u25-2.3.10-1) unstable; urgency=high + + * IcedTea7 2.3.10 release. + * Security fixes + * S6741606, CVE-2013-2407: Integrate Apache Santuario. + * S7158805, CVE-2013-2445: Better rewriting of nested subroutine calls. + * S7170730, CVE-2013-2451: Improve Windows network stack support. + * S8000638, CVE-2013-2450: Improve deserialization. + * S8000642, CVE-2013-2446: Better handling of objects for transportation. + * S8001032: Restrict object access. + * S8001033, CVE-2013-2452: Refactor network address handling in virtual + machine identifiers. + * S8001034, CVE-2013-1500: Memory management improvements. + * S8001038, CVE-2013-2444: Resourcefully handle resources. + * S8001043: Clarify definition restrictions. + * S8001308: Update display of applet windows. + * S8001309: Better handling of annotation interfaces. + * S8001318, CVE-2013-2447: Socket.getLocalAddress not consistent with + InetAddress.getLocalHost. + * S8001330, CVE-2013-2443: Improve on checking order (non-Zero builds only). + * S8003703, CVE-2013-2412: Update RMI connection dialog box. + * S8004288, CVE-2013-2449: (fs) Files.probeContentType problems. + * S8004584: Augment applet contextualization. + * S8005007: Better glyph processing. + * S8006328, CVE-2013-2448: Improve robustness of sound classes. + * S8006611: Improve scripting. + * S8007467: Improve robustness of JMX internal APIs. + * S8007471: Improve MBean notifications. + * S8007812, CVE-2013-2455: (reflect) Class.getEnclosingMethod problematic for some classes. + * S8007925: Improve cmsStageAllocLabV2ToV4curves. + * S8007926: Improve cmsPipelineDup. + * S8007927: Improve cmsAllocProfileSequenceDescription. + * S8007929: Improve CurvesAlloc. + * S8008120, CVE-2013-2457: Improve JMX class checking. + * S8008124, CVE-2013-2453: Better compliance testing. + * S8008128: Better API coherence for JMX. + * S8008132, CVE-2013-2456: Better serialization support. + * S8008585: Better JMX data handling. + * S8008593: Better URLClassLoader resource management. + * S8008603: Improve provision of JMX providers. + * S8008607: Better input checking in JMX. + * S8008611: Better handling of annotations in JMX. + * S8008615: Improve robustness of JMX internal APIs. + * S8008623: Better handling of MBeanServers. + * S8008744, CVE-2013-2407: Rework part of fix for JDK-6741606. + * S8008982: Adjust JMX for underlying interface changes. + * S8009004: Better implementation of RMI connections. + * S8009008: Better manage management-api. + * S8009013: Better handling of T2K glyphs. + * S8009034: Improve resulting notifications in JMX. + * S8009038: Improve JMX notification support. + * S8009057, CVE-2013-2448: Improve MIDI event handling. + * S8009067: Improve storing keys in KeyStore. + * S8009071, CVE-2013-2459: Improve shape handling. + * S8009235: Improve handling of TSA data. + * S8009424, CVE-2013-2458: Adapt Nashorn to JSR-292 implementation change. + * S8009554, CVE-2013-2454: Improve SerialJavaObject.getFields. + * S8009654: Improve stability of cmsnamed. + * S8010209, CVE-2013-2460: Better provision of factories. + * S8011243, CVE-2013-2470: Improve ImagingLib. + * S8011248, CVE-2013-2471: Better Component Rasters. + * S8011253, CVE-2013-2472: Better Short Component Rasters. + * S8011257, CVE-2013-2473: Better Byte Component Rasters. + * S8012375, CVE-2013-1571: Improve Javadoc framing. + * S8012421: Better positioning of PairPositioning. + * S8012438, CVE-2013-2463: Better image validation. + * S8012597, CVE-2013-2465: Better image channel verification. + * S8012601, CVE-2013-2469: Better validation of image layouts. + * S8014281, CVE-2013-2461: Better checking of XML signature. + * S8015997: Additional improvement in Javadoc framing. + * Breaks icedtea-netx (<< 1.4-2). + + -- Matthias Klose Fri, 28 Jun 2013 16:55:32 +0200 + +openjdk-7 (7u21-2.3.9-5) unstable; urgency=low + + * Update kFreeBSD support (Guido Guenther). Closes: #708818. + * Stop building the transitional cacao package for sid. + + -- Matthias Klose Sat, 18 May 2013 20:13:33 +0200 + +openjdk-7 (7u21-2.3.9-4) unstable; urgency=high + + * Build the transitional cacao package for sid as well. Apparently + some buildds are not updated to list wheezy as the code name for + the current distribution. + + -- Matthias Klose Thu, 02 May 2013 03:27:44 +0200 + +openjdk-7 (7u21-2.3.9-3) unstable; urgency=high + + * Disable the cacao build again, causing build failures on i386 and s390. + * Build a transitional cacao jre package instead. + + -- Matthias Klose Tue, 30 Apr 2013 00:27:05 +0200 + +openjdk-7 (7u21-2.3.9-2) unstable; urgency=high + + * On ia64, use gcj-4.7 for the bootstrap build. + * Drop the cacao jre from recommends to suggests. + * Re-enable cacao, was enabled in the 2.1.x series. + + -- Matthias Klose Sat, 27 Apr 2013 01:17:16 +0200 + +openjdk-7 (7u21-2.3.9-1) unstable; urgency=high + + * IcedTea7 2.3.9 release. + * Security fixes: + - S6657673, CVE-2013-1518: Issues with JAXP. + - S7200507: Refactor Introspector internals. + - S8000724, CVE-2013-2417: Improve networking serialization. + - S8001031, CVE-2013-2419: Better font processing. + - S8001040, CVE-2013-1537: Rework RMI model. + - S8001322: Refactor deserialization. + - S8001329, CVE-2013-1557: Augment RMI logging. + - S8003335: Better handling of Finalizer thread. + - S8003445: Adjust JAX-WS to focus on API. + - S8003543, CVE-2013-2415: Improve processing of MTOM attachments. + - S8004261: Improve input validation. + - S8004336, CVE-2013-2431: Better handling of method handle intrinsic frames. + - S8004986, CVE-2013-2383: Better handling of glyph table. + - S8004987, CVE-2013-2384: Improve font layout. + - S8004994, CVE-2013-1569: Improve checking of glyph table. + - S8005432: Update access to JAX-WS. + - S8005943: (process) Improved Runtime.exec. + - S8006309: More reliable control panel operation. + - S8006435, CVE-2013-2424: Improvements in JMX. + - S8006790: Improve checking for windows. + - S8006795: Improve font warning messages. + - S8007406: Improve accessibility of AccessBridge. + - S8007617, CVE-2013-2420: Better validation of images. + - S8007667, CVE-2013-2430: Better image reading. + - S8007918, CVE-2013-2429: Better image writing. + - S8008140: Better method handle resolution. + - S8009049, CVE-2013-2436: Better method handle binding. + - S8009063, CVE-2013-2426: Improve reliability of ConcurrentHashMap. + - S8009305, CVE-2013-0401: Improve AWT data transfer. + - S8009677, CVE-2013-2423: Better setting of setters. + - S8009699, CVE-2013-2421: Methodhandle lookup. + - S8009814, CVE-2013-1488: Better driver management. + - S8009857, CVE-2013-2422: Problem with plugin. + * Backports: + - S7130662: GTK file dialog crashes with a NPE. + * Bug fixes + - PR1363: Fedora 19 / rawhide FTBFS SIGILL. + - PR1401: Fix Zero build on 2.3.8. + - Fix offset problem in ICU LETableReference. + - Change -Werror fix to preserve OpenJDK default. + - PR1303: Correct #ifdef to #if. + - PR1404: Failure to bootstrap with ecj 4.2. + + -- Matthias Klose Mon, 22 Apr 2013 03:27:08 +0200 + +openjdk-7 (7u17-2.3.8-2) experimental; urgency=low + + * Remove Torsten Werner as uploader. + + -- Matthias Klose Mon, 01 Apr 2013 00:39:58 +0200 + +openjdk-7 (7u17-2.3.8-1ubuntu1) raring; urgency=low + + * Regenerate the control file. + + -- Matthias Klose Sun, 31 Mar 2013 20:10:05 +0200 + +openjdk-7 (7u17-2.3.8-1) experimental; urgency=low + + * IcedTea7 2.3.8 release. + * Security fixes: + - S8007014, CVE-2013-0809: Improve image handling. + - S8007675, CVE-2013-1493: Improve color conversion. + * Backports: + - S8002344: Krb5LoginModule config class does not return proper KDC list + from DNS. + - S8004344: Fix a crash in ToolkitErrorHandler() in XlibWrapper.c. + - S8006179: JSR292 MethodHandles lookup with interface using findVirtual(). + - S8006882: Proxy generated classes in sun.proxy package breaks JMockit. + * Bug fixes: + - PR1303: Correct #ifdef to #if. + - PR1340: Simplify the rhino class rewriter to avoid use of concurrency. + - Revert 7017193 and add the missing free call, until a better fix is ready. + + -- Matthias Klose Sun, 31 Mar 2013 14:31:11 +0200 + +openjdk-7 (7u15-2.3.7-1ubuntu2) raring; urgency=low + + * Security fixes: + - S8007014, CVE-2013-0809: Improve image handling + - S8007675, CVE-2013-1493: Improve color conversion + - debian/rules: updated to add 8007014.patch and 8007675.patch + + -- Jamie Strandboge Wed, 06 Mar 2013 14:12:03 -0600 + +openjdk-7 (7u15-2.3.7-1ubuntu1) raring; urgency=low + + * Regenerate the control file. + + -- Matthias Klose Wed, 20 Feb 2013 23:59:54 +0100 + +openjdk-7 (7u15-2.3.7-1) experimental; urgency=low + + * IcedTea7 2.3.7 release. + * Security fixes: + - S8004937, CVE-2013-1484: Improve proxy construction. + - S8006439, CVE-2013-1485: Improve MethodHandles coverage. + - S8006446, CVE-2013-1486: Restrict MBeanServer access. + - S8006777, CVE-2013-0169: Improve TLS handling of invalid messages. + - S8007688: Blacklist known bad certificate. + * Backports: + - S8007393: Possible race condition after JDK-6664509. + - S8007611: logging behavior in applet changed. + * For zero builds, use the same hotspot version as in 2.1.6. + * Reenable bootstrap builds, except for alpha. + * Explicitly disable building on mips/mipsel. Not supported by the + Debian OpenJDK maintainers, the Debian mips porters, or the Debian + Java team. + + -- Matthias Klose Wed, 20 Feb 2013 23:33:58 +0100 + +openjdk-7 (7u13-2.3.6-1) experimental; urgency=low + + * IcedTea7 2.3.6 release. + - Disable bootstrap builds, currently broken in IcedTea. + * Security fixes: + - S6563318, CVE-2013-0424: RMI data sanitization. + - S6664509, CVE-2013-0425: Add logging context. + - S6664528, CVE-2013-0426: Find log level matching its name or value given + at construction time. + - S6776941: CVE-2013-0427: Improve thread pool shutdown. + - S7141694, CVE-2013-0429: Improving CORBA internals. + - S7173145: Improve in-memory representation of splashscreens. + - S7186945: Unpack200 improvement. + - S7186946: Refine unpacker resource usage. + - S7186948: Improve Swing data validation. + - S7186952, CVE-2013-0432: Improve clipboard access. + - S7186954: Improve connection performance. + - S7186957: Improve Pack200 data validation. + - S7192392, CVE-2013-0443: Better validation of client keys. + - S7192393, CVE-2013-0440: Better Checking of order of TLS Messages. + - S7192977, CVE-2013-0442: Issue in toolkit thread. + - S7197546, CVE-2013-0428: (proxy) Reflect about creating reflective proxies. + - S7200491: Tighten up JTable layout code. + - S7200500: Launcher better input validation. + - S7201064: Better dialogue checking. + - S7201066, CVE-2013-0441: Change modifiers on unused fields. + - S7201068, CVE-2013-0435: Better handling of UI elements. + - S7201070: Serialization to conform to protocol. + - S7201071, CVE-2013-0433: InetSocketAddress serialization issue. + - S8000210: Improve JarFile code quality. + - S8000537, CVE-2013-0450: Contextualize RequiredModelMBean class. + - S8000540, CVE-2013-1475: Improve IIOP type reuse management. + - S8000631, CVE-2013-1476: Restrict access to class constructor. + - S8001235, CVE-2013-0434: Improve JAXP HTTP handling. + - S8001242: Improve RMI HTTP conformance. + - S8001307: Modify ACC_SUPER behavior. + - S8001972, CVE-2013-1478: Improve image processing. + - S8002325, CVE-2013-1480: Improve management of images. + * Fix font suggestion for indic fonts in wheezy. + * Fix fontconfig definitions for japanese and korean fonts, fixing + compilation of the fontconfig file. + * Add Built-Using: rhino attribute for the -lib package. + * Don't use concurrent features to rewrite the rhino jar file. + * Enable class data sharing for the hotspot server VM. + + -- Matthias Klose Tue, 12 Feb 2013 20:59:48 +0100 + +openjdk-7 (7u9-2.3.4-1) experimental; urgency=low + + * IcedTea7 2.3.4 release. + * Security fixes + - S8004933, CVE-2012-3174: Improve MethodHandle interaction with libraries. + - S8006017, CVE-2013-0422: Improve lookup resolutions. + - S8006125: Update MethodHandles library interactions. + * Bug fixes + - S7197906: BlockOffsetArray::power_to_cards_back() needs to handle > 32 bit + shifts. + - G422525: Fix building with PaX enabled kernels. + + [ Matthias Klose ] + * Loosen OpenGL dependency. Closes: #695028. + * Fix error parsing drop files parameter from pcmanfm (Alberto Fernández + Martínez). Closes: #695992. + + [ Thorsten Glaser ] + * debian/rules: Use gcj-4.6-jdk for m68k builds. + * d/patches/text-relocations.patch: build with -fPIC on all archs. + + -- Matthias Klose Tue, 15 Jan 2013 23:38:48 +0100 + +openjdk-7 (7u9-2.3.3-1) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Wed, 17 Oct 2012 15:16:51 +0200 + +openjdk-7 (7u9-2.3.3-0ubuntu1) quantal-security; urgency=low + + * IcedTea7 2.3.3 release. + * Security fixes + - S6631398, CVE-2012-3216: FilePermission improved path checking. + - S7093490: adjust package access in rmiregistry. + - S7143535, CVE-2012-5068: ScriptEngine corrected permissions. + - S7158796, CVE-2012-5070: Tighten properties checking in EnvHelp. + - S7158807: Revise stack management with volatile call sites. + - S7163198, CVE-2012-5076: Tightened package accessibility. + - S7167656, CVE-2012-5077: Multiple Seeders are being created. + - S7169884, CVE-2012-5073: LogManager checks do not work correctly for + sub-types. + - S7169887, CVE-2012-5074: Tightened package accessibility. + - S7169888, CVE-2012-5075: Narrowing resource definitions in JMX RMI + connector. + - S7172522, CVE-2012-5072: Improve DomainCombiner checking. + - S7186286, CVE-2012-5081: TLS implementation to better adhere to RFC. + - S7189103, CVE-2012-5069: Executors needs to maintain state. + - S7189490: More improvements to DomainCombiner checking. + - S7189567, CVE-2012-5085: java net obselete protocol. + - S7192975, CVE-2012-5071: Issue with JMX reflection. + - S7195194, CVE-2012-5084: Better data validation for Swing. + - S7195549, CVE-2012-5087: Better bean object persistence. + - S7195917, CVE-2012-5086: XMLDecoder parsing at close-time should be + improved. + - S7195919, CVE-2012-5979: (sl) ServiceLoader can throw CCE without + needing to create instance. + - S7196190, CVE-2012-5088: Improve method of handling MethodHandles. + - S7198296, CVE-2012-5089: Refactor classloader usage. + - S7158800: Improve storage of symbol tables. + - S7158801: Improve VM CompileOnly option. + - S7158804: Improve config file parsing. + - S7198606, CVE-2012-4416: Improve VM optimization. + + -- Matthias Klose Wed, 17 Oct 2012 13:27:47 +0200 + +openjdk-7 (7u7-2.3.2a-1ubuntu1) quantal; urgency=low + + * Build a transitional icedtea-7-jre-cacao package to ease upgrades. + + -- Matthias Klose Wed, 19 Sep 2012 17:42:39 +0200 + +openjdk-7 (7u7-2.3.2a-1) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Sat, 15 Sep 2012 22:20:06 +0200 + +openjdk-7 (7u7-2.3.2a-0ubuntu1) quantal; urgency=low + + * Repackage the source to drop the cacao tarball (and packaging files). + * Depend again on system provided tzdata-java and restore the zi + symlink on upgrade. LP: #1050404. + * libgnome2-0, libgnomevfs2-0, libgconf2-4 are not prepared for multiarch. + Don't depend on these so that openjdk-7 can be installed as a multiarch + package. + + -- Matthias Klose Sat, 15 Sep 2012 17:01:12 +0200 + +openjdk-7 (7u7-2.3.2-1ubuntu2) quantal; urgency=low + + * Make the avian VM a known runtime. + + -- Matthias Klose Wed, 05 Sep 2012 11:58:35 +0200 + +openjdk-7 (7u7-2.3.2-1ubuntu1) quantal; urgency=low + + * Fix 32bit hotspot build, don't set maximal heap space lower than + minimal heap space for the docs build. + * d/p/sane-library-paths.patch, d/p/ant-diagnostics.diff, + d/p/fix-race-cond-print.diff, d/p/gcc-hotspot-opt-O[02].diff, + d/p/gcc-mtune-generic.diff, d/p/openjdk-6986968.diff: Remove, not used. + * Remove unused shark/llvm-3.0 patches. + * d/p/zero-only-use-floating-point-if-floating-poi.patch: Remove, applied + upstream. + * Don't explicitly build with -march=i586 on i386 architectures. + * Re-apply zero-missing-headers.diff. + * Disable cacao builds, needs update for 7u7. + * For Ubuntu quantal, set priorities for alternatives higher than for + OpenJDK 6. + * Call update-alternatives when the existing priority for the alternative + is lower than the current one. + * Configure with --disable-downloading. + * Pass -avoid-version to libtool to create a JamVM libjvm.so without SONAME + version numbers to match the Hotspot Server/Client libjvm.so. LP: #850433. + * Revert the following change: Move libgnome2-0, libgnomevfs2-0, libgconf2-4 + from Depends of JRE package to Recommends (#661465). + The proper fix is to create a -jdk-headless package, or not depending on + these gnome packages at all (e.g. using XDG libraries). + + -- Matthias Klose Tue, 04 Sep 2012 12:08:31 +0200 + +openjdk-7 (7u7-2.3.2-1) experimental; urgency=low + + * New upstream IcedTea7 2.3.2 release. + * Security fixes: + - CVE-2012-4681: Reintroduce PackageAccessible checks removed in 6788531. + - S7079902, CVE-2012-1711: Refine CORBA data models. + - S7143606, CVE-2012-1717: File.createTempFile should be improved + for temporary files created by the platform. + - S7143614, CVE-2012-1716: SynthLookAndFeel stability improvement. + - S7143617, CVE-2012-1713: Improve fontmanager layout lookup operations. + - S7143851, CVE-2012-1719: Improve IIOP stub and tie generation in RMIC. + - S7143872, CVE-2012-1718: Improve certificate extension processing. + - S7152811, CVE-2012-1723: Issues in client compiler. + - S7157609, CVE-2012-1724: Issues with loop. + - S7160757, CVE-2012-1725: Problem with hotspot/runtime_classfile. + - S7165628, CVE-2012-1726: Issues with java.lang.invoke.MethodHandles.Lookup. + * Bump version to 7u7 (OpenJDK), 2.3.2 (IcedTea). Closes: #685276. + * d/p/icedtea7-forest-jdk_7104625-XEvent_wrap_logging_calls_with_if.patch, + d/p/hotspot-sparc.diff: Remove, integrated upstream. + * d/p/{deb-multiarch,fix_extra_flags,hotspot-no-werror}.diff: + Add variants for hotspot and zero builds. + * d/p/default-jvm-cfg.diff, d/p/icedtea-4953367.patch, + d/p/icedtea-patch.diff, d/p/icedtea-pretend-memory.diff, + d/p/libpcsclite-dlopen.diff, d/p/nonreparenting-wm.diff: + Update for 2.3.2. + * Remove build support for Ubuntu releases earlier than hardy. + * d/update-shasum.sh: Only update the shasums of the -dfsg tarballs. + * Don't apply shark patches (not built anyway). + + -- Matthias Klose Sat, 01 Sep 2012 11:46:50 +0200 + +openjdk-7 (7u3-2.1.7-1) unstable; urgency=high + + * IcedTea7 2.1.7 release: + * Security fixes: + - S8007014, CVE-2013-0809: Improve image handling. + - S8007675, CVE-2013-1493: Improve color conversion. + * Backports: + - S8002344: Krb5LoginModule config class does not return proper KDC list + from DNS. + - S8004344: Fix a crash in ToolkitErrorHandler() in XlibWrapper.c. + - S8006179: JSR292 MethodHandles lookup with interface using findVirtual(). + - S8006882: Proxy generated classes in sun.proxy package breaks JMockit. + * Bug fixes: + - PR1303: Correct #ifdef to #if + - Stop libraries being stripped in the OpenJDK build. + - PR1340: Simplify the rhino class rewriter to avoid use of concurrency. + - Revert 7017193 and add the missing free call, until a better fix is ready. + + -- Matthias Klose Sat, 30 Mar 2013 11:31:12 +0100 + +openjdk-7 (7u3-2.1.6-1) unstable; urgency=high + + * IcedTea7 2.1.5 release: + * Security fixes: + - S6563318, CVE-2013-0424: RMI data sanitization. + - S6664509, CVE-2013-0425: Add logging context. + - S6664528, CVE-2013-0426: Find log level matching its name or value + given at construction time. + - S6776941: CVE-2013-0427: Improve thread pool shutdown. + - S7141694, CVE-2013-0429: Improving CORBA internals. + - S7173145: Improve in-memory representation of splashscreens. + - S7186945: Unpack200 improvement. + - S7186946: Refine unpacker resource usage. + - S7186948: Improve Swing data validation. + - S7186952, CVE-2013-0432: Improve clipboard access. + - S7186954: Improve connection performance. + - S7186957: Improve Pack200 data validation. + - S7192392, CVE-2013-0443: Better validation of client keys. + - S7192393, CVE-2013-0440: Better Checking of order of TLS Messages. + - S7192977, CVE-2013-0442: Issue in toolkit thread. + - S7197546, CVE-2013-0428: (proxy) Reflect about creating reflective + proxies. + - S7200491: Tighten up JTable layout code. + - S7200493, CVE-2013-0444: Improve cache handling. + - S7200499: Better data validation for options. + - S7200500: Launcher better input validation. + - S7201064: Better dialogue checking. + - S7201066, CVE-2013-0441: Change modifiers on unused fields. + - S7201068, CVE-2013-0435: Better handling of UI elements. + - S7201070: Serialization to conform to protocol. + - S7201071, CVE-2013-0433: InetSocketAddress serialization issue. + - S8000210: Improve JarFile code quality. + - S8000537, CVE-2013-0450: Contextualize RequiredModelMBean class. + - S8000539, CVE-2013-0431: Introspect JMX data handling. + - S8000540, CVE-2013-1475: Improve IIOP type reuse management. + - S8000631, CVE-2013-1476: Restrict access to class constructor. + - S8001235, CVE-2013-0434: Improve JAXP HTTP handling. + - S8001242: Improve RMI HTTP conformance. + - S8001307: Modify ACC_SUPER behavior. + - S8001972, CVE-2013-1478: Improve image processing. + - S8002325, CVE-2013-1480: Improve management of images. + * Backports: + - S7054590: (JSR-292) MethodHandleProxies.asInterfaceInstance() + accepts private/protected nested interfaces. + - S7175616: Port fix for TimeZone from JDK 8 to JDK 7. + - S8002068: Build broken: corba code changes unable to use new + JDK 7 classes. + - S8004341: Two JCK tests fails with 7u11 b06. + - S8005615: Java Logger fails to load tomcat logger implementation (JULI). + * IcedTea7 2.1.6 release: + * Security fixes: + - S8004937, CVE-2013-1484: Improve proxy construction. + - S8006439, CVE-2013-1485: Improve MethodHandles coverage. + - S8006446, CVE-2013-1486: Restrict MBeanServer access. + - S8006777, CVE-2013-0169: Improve TLS handling of invalid messages. + - S8007688: Blacklist known bad certificate. + * Backports: + - S7123519: problems with certification path. + - S8007393: Possible race condition after JDK-6664509. + - S8007611: logging behavior in applet changed. + * Fix font suggestion for indic fonts in wheezy. + * Fix fontconfig definitions for japanese and korean fonts, fixing + compilation of the fontconfig file. + * Add Built-Using: rhino attribute for the -lib package. + * Don't use concurrent features to rewrite the rhino jar file. + * Enable class data sharing for the hotspot server VM. + * Enable bootstrap builds for alpha. + * Explicitly disable building on mips/mipsel. Not supported by the + Debian OpenJDK maintainers, the Debian mips porters, or the Debian + Java team. + + -- Matthias Klose Thu, 21 Feb 2013 03:38:13 +0100 + +openjdk-7 (7u3-2.1.4-1) unstable; urgency=low + + * IcedTea7 2.1.4 release. + * Security fixes + - S8004933, CVE-2012-3174: Improve MethodHandle interaction with libraries + - S8006017, CVE-2013-0422: Improve lookup resolutions + - S8006125: Update MethodHandles library interactions + * Loosen OpenGL dependency. Closes: #695028. + * Fix error parsing drop files parameter from pcmanfm (Alberto Fernández + Martínez). Closes: #695992. + + -- Matthias Klose Wed, 16 Jan 2013 11:46:20 +0100 + +openjdk-7 (7u3-2.1.3-1) unstable; urgency=low + + * IcedTea7 2.1.3 release. + * Security fixes + - S6631398, CVE-2012-3216: FilePermission improved path checking. + - S7093490: adjust package access in rmiregistry. + - S7143535, CVE-2012-5068: ScriptEngine corrected permissions. + - S7158796, CVE-2012-5070: Tighten properties checking in EnvHelp. + - S7158807: Revise stack management with volatile call sites. + - S7163198, CVE-2012-5076: Tightened package accessibility. + - S7167656, CVE-2012-5077: Multiple Seeders are being created. + - S7169884, CVE-2012-5073: LogManager checks do not work correctly for + sub-types. + - S7169887, CVE-2012-5074: Tightened package accessibility. + - S7169888, CVE-2012-5075: Narrowing resource definitions in JMX RMI + connector. + - S7172522, CVE-2012-5072: Improve DomainCombiner checking. + - S7186286, CVE-2012-5081: TLS implementation to better adhere to RFC. + - S7189103, CVE-2012-5069: Executors needs to maintain state. + - S7189490: More improvements to DomainCombiner checking. + - S7189567, CVE-2012-5085: java net obselete protocol. + - S7192975, CVE-2012-5071: Issue with JMX reflection. + - S7195194, CVE-2012-5084: Better data validation for Swing. + - S7195549, CVE-2012-5087: Better bean object persistence. + - S7195917, CVE-2012-5086: XMLDecoder parsing at close-time should be + improved. + - S7195919, CVE-2012-5979: (sl) ServiceLoader can throw CCE without + needing to create instance. + - S7196190, CVE-2012-5088: Improve method of handling MethodHandles. + - S7198296, CVE-2012-5089: Refactor classloader usage. + - S7158801: Improve VM CompileOnly option. + - S7158804: Improve config file parsing. + - S7198606, CVE-2012-4416: Improve VM optimization. + * Backports + - S7175845: "jar uf" changes file permissions unexpectedly. + - S7177216: native2ascii changes file permissions of input file. + - S7106773: 512 bits RSA key cannot work with SHA384 and SHA512. + - S7158800: Improve storage of symbol tables. + + -- Matthias Klose Wed, 17 Oct 2012 16:03:47 +0200 + +openjdk-7 (7u3-2.1.2-2ubuntu1) precise-security; urgency=low + + * Make the avian VM a known runtime. + + -- Matthias Klose Sat, 08 Sep 2012 16:01:31 +0200 + +openjdk-7 (7u3-2.1.2-2) unstable; urgency=high + + * Pass -avoid-version to libtool to create a JamVM libjvm.so without SONAME + version numbers to match the Hotspot Server/Client libjvm.so. LP: #850433. + + -- Matthias Klose Tue, 04 Sep 2012 17:55:43 +0200 + +openjdk-7 (7u3-2.1.2-1) unstable; urgency=high + + * IcedTea7 2.1.2 release. + * Security fixes + - CVE-2012-4681, S7162473: Reintroduce PackageAccessible checks removed + in 6788531. + - S7162476, CVE-2012-1682: XMLDecoder security issue via ClassFinder. + - S7194567, CVE-2012-3136: Improve long term persistence of java.beans + objects. + - S7163201, CVE-2012-0547: Simplify toolkit internals references. + * d/p/hotspot-sparc.diff: Remove, integrated upstream. + * Stop running the mauve tests. + + -- Matthias Klose Mon, 03 Sep 2012 23:17:11 +0200 + +openjdk-7 (7~u3-2.1.1-3) unstable; urgency=low + + * d/rules: Ensure we don't remove -02 (default) when -03 is disabled + (fix jamvm FTBFS on armhf without -02). + * d/patches/gcc-jdk-opt-O0.diff, d/patches/gcc-jdk-opt-O2.diff, + d/patches/gcc-no-hardening.diff, d/patches/gcc-opt-O2.diff: removed. + + -- Damien Raude-Morvan Wed, 25 Jul 2012 21:18:15 +0200 + +openjdk-7 (7~u3-2.1.1-2) unstable; urgency=low + + * d/rules: On Debian Wheezy/Sid bump Build-Depends on libnss3-dev + (>= 2:3.13.4) and Depends on libnss3 (>= 2:3.13.4) (ie. with epoch). + (Closes: #679465). + * d/control: Suggests icedtea-7-plugin instead of icedtea6-plugin + (Closes: #680284). + * d/patches/7130140-MouseEvent-systemout.diff: Remove "MEvent. CASE!" from + console output. (Closes: #679036). + * Disable -O3 compile: cause wrong Math.* computations. + (Closes: #679292 and Closes: #678228). LP: #1044857. + * debian/patches/FreetypeFontScaler_getFontMetricsNative.diff: + Fix "OpenJDK returns the text height greater than font size". + (Closes: #657854) + + -- Damien Raude-Morvan Sat, 30 Jun 2012 18:17:51 +0200 + +openjdk-7 (7~u3-2.1.1-1) unstable; urgency=medium + + * New upstream release with security fixes (Closes: #677486): + - S7079902, CVE-2012-1711: Refine CORBA data models + - S7110720: Issue with vm config file loadingIssue with + vm config file loading + - S7143606, CVE-2012-1717: File.createTempFile should be improved + for temporary files created by the platform. + - S7143614, CVE-2012-1716: SynthLookAndFeel stability improvement + - S7143617, CVE-2012-1713: Improve fontmanager layout lookup operations + - S7143851, CVE-2012-1719: Improve IIOP stub and tie generation in RMIC + - S7143872, CVE-2012-1718: Improve certificate extension processing + - S7145239: Finetune package definition restriction + - S7152811, CVE-2012-1723: Issues in client compiler + - S7157609, CVE-2012-1724: Issues with loop + - S7160677: missing else in fix for 7152811 + - S7160757, CVE-2012-1725: Problem with hotspot/runtime_classfile + - S7165628, CVE-2012-1726: Issues with + java.lang.invoke.MethodHandles.Lookup + * Patches merged upstream: + - debian/patches/arm-thumb-fix.diff + - debian/patches/gcc-4.7.diff + + [ James Page ] + * Cherry picked patch from openjdk-6 to fix handling of + ICC profiles (LP: #888123, #888129) (Closes: #676351). + + [ Damien Raude-Morvan ] + * Move libgnome2-0, libgnomevfs2-0, libgconf2-4 from Depends of JRE package + to Recommends (Closes: #661465). + * New jni_md_h_JNIEXPORT_visibility.patch to allow JNIEXPORT definition + to work with -fvisibility=hidden. (Closes: #670896). + + -- Damien Raude-Morvan Mon, 11 Jun 2012 21:01:10 +0200 + +openjdk-7 (7~u3-2.1.1~pre1-2) unstable; urgency=low + + * Don't mark the -demo package as Multi-Arch same. Closes: #670038. + * Build using gcc-4.4 on mips, mipsel. + * Build again with older gcj version on s390 (4.6). + + -- Matthias Klose Thu, 03 May 2012 10:44:20 +0200 + +openjdk-7 (7~u3-2.1.1~pre1-1ubuntu3) precise-proposed; urgency=low + + * Default to the ARM assembler interpreter instead to JamVM on + ARM. LP: #993380. + + -- Matthias Klose Wed, 02 May 2012 17:58:20 +0200 + +openjdk-7 (7~u3-2.1.1~pre1-1ubuntu2) precise; urgency=low + + * Use the /usr/bin path for the policytool desktop file. LP: #980205. + Closes: #670037. + + -- Matthias Klose Thu, 12 Apr 2012 23:29:06 +0200 + +openjdk-7 (7~u3-2.1.1~pre1-1ubuntu1) precise; urgency=low + + * Regenerate the control file. + + -- Matthias Klose Wed, 11 Apr 2012 07:21:41 +0200 + +openjdk-7 (7~u3-2.1.1~pre1-1) unstable; urgency=low + + * Update from the IcedTea7-2.1 release branch (20110410). + * Install desktop files again, using the common /usr/bin/java + interpreter name. + * Build-depend on libpng-dev for newer releases. Closes: #662452. + * Let dlopen handle finding the libpcsclite library. LP: #898689. + * Build-depend on fonts-ipafont-mincho, fixing a build failure in the + fontconfig compiler (find out why it breaks ...). + * Build using gcc-4.7/gcj-4.7 for sid/wheezy, fix build failure. + * Remove `-icedtea' suffix from the release identification. + * Fix arm thumb build, update taken from IcedTea6. + + -- Matthias Klose Tue, 10 Apr 2012 14:11:09 +0200 + +openjdk-7 (7~u3-2.1-4) unstable; urgency=low + + [ Matthias Klose ] + * Don't install the binary fontconfig file. LP: #964303. + + [ Damien Raude-Morvan ] + * Remove libxp-dev check in configure.ac, it's not needed anymore + (Closes: #657260) and so drop build dependency on libxp-dev. + * Fix FTBFS with glib 2.32 by adding explicit dependency gthread-2.0.pc + (Closes: #665666). + * Use libpng-dev instead of libpng12-dev for wheezy/sid (Closes: #662453). + + -- Damien Raude-Morvan Mon, 09 Apr 2012 00:21:20 +0200 + +openjdk-7 (7~u3-2.1-3) unstable; urgency=low + + * d/rules,Makefile.am: Improve handling of dpkg-buildflags: don't overwrite + CFLAGS of hotspot but use EXTRA_* flags into icedtea and openjdk Makefile. + (Closes: #661695). + * d/rules: Build everything with -03 opt level (jamvm, cacao and jdk) + * d/patches/kfreebsd-support-*.diff: Refresh kfreebsd patches and + fix FTBFS on k-i386 (ie. at least on a sid VM). + * Backport S7104625 as d/patches/icedtea7-forest-jdk_7104625*.patch + to check for logging to prevent wasted CPU (Closes: #651423). + + -- Damien Raude-Morvan Tue, 06 Mar 2012 01:09:09 +0100 + +openjdk-7 (7~u3-2.1-2) unstable; urgency=low + + [ Matthias Klose ] + * Use NanumMyeongjo as the preferred korean font. LP: #792471. + * Fix crash in java.net.NetworkInterface.getNetworkInterfaces() when + ifr_ifindex exceeds 255. LP: #925218. S7078386. + * Use IPAfont as the preferred japanesse font. Closes: #646054. + * Build using gcj on alpha and armel. Closes: #655750. + + [ Damien Raude-Morvan ] + * d/patches/sparc-stubgenerator.diff: Fix FTBFS on sparc on + stubGenerator_sparc.cpp by using explicit class typedef + (Closes: #660871). + * d/patches/fix_extra_flags.diff: Improve support for hardened build, + also send flags to jdk build and send -Wl,-z,relro during hotspot link. + * Bump Standards-Version to 3.9.3: no changes needed. + * d/control: Don't use nonexistent dlopenjl:Recommends substvar, + replaced by dlopenhl:Recommends. + * d/*.{prerm,postrm}: Use set -e inside script instead of sh -e shebang. + * Cleanup lintian-overrides. + + -- Damien Raude-Morvan Wed, 29 Feb 2012 00:52:49 +0100 + +openjdk-7 (7~u3-2.1-1ubuntu2) precise; urgency=low + + * Make sure that the nss.cfg doesn't mention any library path. + LP: #939361, #939419. + * Disable the accessibility wrapper, doesn't work yet. LP: #935296. + + -- Matthias Klose Fri, 24 Feb 2012 15:10:12 +0100 + +openjdk-7 (7~u3-2.1-1ubuntu1) precise; urgency=low + + [ Damien Raude-Morvan ] + * d/patches/jexec.diff: Dropped, uneeded and not compatible with multi-arch. + * d/rules: Use dpkg-buildflags to enable hardened build. + (Closes: #660021). + + [ Matthias Klose ] + * Merge r522 from openjdk6: + - Make upgrades from non-multiarch to multiarch builds more silent. + - Fix order of grant decls in java.policy. + - Make doc files multi-arch installable. + - JB-archive.applications.in: Use /usr/bin/java by default. Maybe + should be moved to the default-jdk package. + * Explicitly look for the gthread-2.0 pkgconfig module. + + -- Matthias Klose Wed, 22 Feb 2012 14:07:16 +0100 + +openjdk-7 (7~u3-2.1-1) unstable; urgency=low + + * Update icedtea7 2.1 (OpenJDK7 ~u3 release): + - Check for logging to prevent wasted CPU (Closes: #651423). + * Fix following security issues: + - S7082299, CVE-2011-3571: Fix in AtomicReferenceArray + - S7088367, CVE-2011-3563: Fix issues in java sound + - S7110683, CVE-2012-0502: Issues with some KeyboardFocusManager method + - S7110687, CVE-2012-0503: Issues with TimeZone class + - S7110700, CVE-2012-0505: Enhance exception throwing mechanism in + ObjectStreamClass + - S7110704, CVE-2012-0506: Issues with some method in corba + - S7112642, CVE-2012-0497: Incorrect checking for graphics rendering object + - S7118283, CVE-2012-0501: Better input parameter checking in zip file + processing + - S7126960, CVE-2011-5035: Add property to limit number of request headers + to the HTTP Server + + [ Matthias Klose ] + * openjdk-7-jre-lib: Mark as Multi-Arch: foreign. + + [ Damien Raude-Morvan ] + * Merge r501-521 from openjdk6: + - Fix plugin name in jinfo file. + - Fix build flags for cppInterpreter_arm.o. + - Use java-atk-wrapper instead of java-access-bridge for accessibility. + - Make the java.policy file multi-arch installable. + - Don't install desktop and menu files for multiarch builds. + Needs a better solution. + - Don't install an alternative for the deprecated apt tool. + - Make the upgrade from a non-multiarch installation location more + robust; don't depend on version numbers, but check the path of the + alternatives. + - Disable test for armel and powerpc (broken on buildd) + * d/rules: Make symbolic links to src.zip on /usr/lib/jvm/java-7-openjdk-amd64 + like openjdk-6-jdk (Closes: #649618). + * d/rules: Pass -n to gzip when compressing manpages to be Multi-Arch: same safe. + * d/rules: Add build-arch/build-indep target. + * d/rules: Re-enable Cacao VM! + * d/{rules,control}: Only rhino 1.7R3 is supported by openjdk7, update B-D. + * d/patches/hotspot-s390.diff: Update for latest Hotspot. + * d/patches/icedtea-patch.diff: Move nssLibraryDirectory handling to d/rules. + * d/rules: Remove --with-*-drop-zip options, as code drops are embedded. + * d/patches/hsx23-zero.patch, patches/shark-compiler-fixes.patch: + Fix FTBFS for Zero under Hotspot >= v22. + * d/patches/kfreebsd-*: Refreshed. + * d/control: Make openjdk-7-source:all package binNMU-able by using + Depends ">=" on openjdk-7-jre (ie. src.zip won't change). + + -- Damien Raude-Morvan Wed, 15 Feb 2012 20:55:52 +0100 + +openjdk-7 (7~b147-2.0-1) unstable; urgency=low + + * New upstream IcedTea7 release. + - S7000600, CVE-2011-3547: InputStream skip() information leak. + - S7019773, CVE-2011-3548: mutable static AWTKeyStroke.ctor. + - S7023640, CVE-2011-3551: Java2D TransformHelper integer overflow. + - S7032417, CVE-2011-3552: excessive default UDP socket limit under + SecurityManager. + - S7046794, CVE-2011-3553: JAX-WS stack-traces information leak. + - S7046823, CVE-2011-3544: missing SecurityManager checks in scripting + engine. + - S7055902, CVE-2011-3521: IIOP deserialization code execution. + - S7057857, CVE-2011-3554: insufficient pack200 JAR files uncompress error + checks. + - S7064341, CVE-2011-3389: HTTPS: block-wise chosen-plaintext attack + against SSL/TLS (BEAST). + - S7070134, CVE-2011-3558: HotSpot crashes with sigsegv from PorterStemmer. + - S7077466, CVE-2011-3556: RMI DGC server remote code execution. + - S7083012, CVE-2011-3557: RMI registry privileged code execution. + - S7096936, CVE-2011-3560: missing checkSetFactory calls in + HttpsURLConnection. + + [ Matthias Klose ] + * Merge debian packaging r501 from openjdk-6: + - Tighten inter-package dependencies for Debian builds. Closes: #641240. + * Build-depend on wdiff. + + -- Damien Raude-Morvan Sat, 01 Oct 2011 10:53:15 +0200 + +openjdk-7 (7~b147-2.0~pre6-2) unstable; urgency=low + + * d/rules: Fix java.policy to include jre/lib/ext/* files (instead of + non-existant ext/*). It'll restore privilegied access from sunpkcs11.jar + to sun.* code. + * d/patches/s390_hotspot_fix.diff: Update to fix FTBFS on s390. + + -- Damien Raude-Morvan Sat, 01 Oct 2011 10:53:15 +0200 + +openjdk-7 (7~b147-2.0~pre6-1) unstable; urgency=low + + * Update to IcedTea7 (20110928). + + [ Matthias Klose ] + * Merge debian packaging r496 from openjdk-6: + - Fix dangling java-1.7.0-openjdk symlink for non-multiarch builds. + + [ Damien Raude-Morvan ] + * d/rules: --disable-compile-against-syscalls for kFreeBSD (since there is + no epoll support). + * Update patches: + - d/patches/sun-awt-buildsystem.diff: Drop, merged upstream. + - d/patches/icedtea-override-redirect-compiz.patch: Refresh. + - d/patches/s390_hotspot_fix.diff: Extracted (instead of direct patch). + * Add Build-Depends on libattr1-dev. + + -- Damien Raude-Morvan Wed, 28 Sep 2011 17:19:33 +0200 + +openjdk-7 (7~b147-2.0~pre5-1) unstable; urgency=low + + * Update to IcedTea7 (20110914). + - d/patches/jdk-no-mapfile.diff: Drop, merged in icedtea7-forest + (for real this time). + - d/patches/sun-awt-buildsystem.diff: Fix icedtea7-forest awt build. + * d/patches/kfreebsd-support-jdk.diff: Refresh. + * d/patches/icedtea-patch.diff: Remove usage of nssLibraryDirectory because + while it works for nss3, it fails for softokn3 (since the latter is + in nss/ subdirectory). Without this parameter, openjdk-7 will rely on + default ld.so behavior. (Closes: #637337, #638008) + In openjdk-6, nssLibraryDirectory was not used to load softokn3 (Secmod). + * d/control: openjdk-7-jre Provides java7-runtime, openjdk-7-jre-headless + Provides java7-runtime-headless and openjdk-7-jdk Provides java7-jdk. + (Closes: #641668). + + -- Damien Raude-Morvan Mon, 19 Sep 2011 16:33:15 +0200 + +openjdk-7 (7~b147-2.0~pre4-1) unstable; urgency=low + + * Update to IcedTea7 (20110906): + - JamVM: support for armhf and other various fixes. + * Upload to unstable. + * Regenerate control file for debian unstable. + * Makefile.am: Force JAVA_HOME for ant call to --with-jdk-home value (without + this, it defaults to existing JAVA_HOME env or /usr/bin/java link) + + -- Damien Raude-Morvan Mon, 05 Sep 2011 23:50:43 +0200 + +openjdk-7 (7~b147-2.0~pre3-3ubuntu2) oneiric; urgency=low + + * Merge debian packaging r491 from openjdk-6: + - Move the -lib files into a different location so that the java-7-openjdk + name can be used as a symlink. + - Symlink the jre/cmm directory, instead of the files inside. Closes: #639883. + + -- Matthias Klose Thu, 01 Sep 2011 21:08:45 +0200 + +openjdk-7 (7~b147-2.0~pre3-3ubuntu1) oneiric; urgency=low + + * Regenerate the control file. + + -- Matthias Klose Sun, 28 Aug 2011 23:42:18 +0200 + +openjdk-7 (7~b147-2.0~pre3-3) experimental; urgency=low + + * Merge debian packaging r485:489 from openjdk-6: + - Build using GCC-4.4 on sparc and sparc64. + - Enable testsuite runs in s390x. + * Merge debian packaging r490 from openjdk-6: + - Set plugin name for the jinfo file. Closes: #638548, + - Disable the mauve testsuite on i386. + - Make the installation multiarch aware. + + -- Matthias Klose Sun, 28 Aug 2011 20:42:54 +0200 + +openjdk-7 (7~b147-2.0~pre3-2) experimental; urgency=low + + * d/patches/jdk-no-mapfile.diff: Re-add was not merged into + current (e46d527097f1) revision but latter. + + -- Damien Raude-Morvan Mon, 22 Aug 2011 00:11:33 +0200 + +openjdk-7 (7~b147-2.0~pre3-1) experimental; urgency=low + + * Update to IcedTea7 (20110821): + - JamVM updates. + - S7070134,S7044738,S7068051,S7073913: Fix random segfaults + and related invalid results from loop unroll optimization. + - d/patches/jdk-no-mapfile.diff: Drop, merged in icedtea7-forest. + + [ Matthias Klose ] + * Build using GCC-4.4 on mips/mipsel. Closes: #628620. + * Merge debian packaging r482:485 from openjdk-6: + - Call dbus-launch --exit-with-session in testsuite. Closes: #612394. + - Build for s390x using Zero. + + [ Damien Raude-Morvan ] + * d/patches/kfreebsd-support-hotspot.diff: Add workaround + to handle #637378. + * d/generate-dfsg-zip.sh: Update to also handle langtools.tar.gz. + Closes: #623693. + + -- Damien Raude-Morvan Sun, 21 Aug 2011 20:08:50 +0200 + +openjdk-7 (7~b147-2.0~pre2-3) experimental; urgency=low + + * d/patches/kfreebsd-support-hotspot.diff: Fix access to CPU registry under + kfreebsd-amd64. + + -- Damien Raude-Morvan Sun, 07 Aug 2011 12:22:47 +0200 + +openjdk-7 (7~b147-2.0~pre2-2) experimental; urgency=low + + * d/patches/kfreebsd-support-jamvm.diff: Add support for kfreebsd-amd64. + * d/patches/kfreebsd-support-hotspot.diff: Small fixes for Hotspot on + kfreebsd-i386. + * Split d/patches/hotspot-s390.diff and zero-missing-headers.diff. + * Re-add missing changes from last upload: + - patches/use-idx_t.patch: Edit upstream patch to avoid FTBFS on s390. + - Makefile.{am,im}: Force bootclasspath (useful when building from + openjdk-6). + + -- Damien Raude-Morvan Sat, 06 Aug 2011 23:50:58 +0200 + +openjdk-7 (7~b147-2.0~pre2-1) experimental; urgency=low + + * Update to icedtea7-forest snapshot (20110804): + - d/patches/pr753.diff: drop, merged in icedtea7-forest. + - d/patches/pr757.diff: drop, merged in icedtea7-forest. + - d/patches/zero-jsr292-fixes.diff: drop, merged in icedtea7-forest. + - d/patches/no-compiler-path.diff: drop, now handled correctly icedtea7's + configure and openjdk's Makefile (by CC and CXX environment variables). + - Updated JamVM to the 2011-08-01 revision. + + [ Damien Raude-Morvan ] + * d/patches/zero-fpu-control-is-noop.diff: Remove ShouldNotCallThis from + os_linux_zero.cpp (fix crash under i386). + * d/rules: Enable support for GNU/kFreeBSD arch: + - d/patches/kfreebsd-support-*: Update with latest fixes. + - d/patches/kfreebsd-sync-issues.diff: hack to force some wait + until we fix sync issues. + - d/rules: Enable shark for GNU/kFreeBSD. + * d/rules: Use DEB_HOST_ARCH_CPU for jvmarch/archdir. Thanks to + Jérémie Koenig for patch. + * d/patches/jexec.diff: Update for openjdk-7. + * d/JB-jdk.overrides.in: Fix override for new Lintian 2.5.0 path handling. + * d/icedtea-7-jre-jamvm.overrides: As for others libjvm.so, we use + --strip-debug instead of --strip-unneeded. + * d/source.lintian-overrides: Drop, not used anymore in openjdk-7. + + [ Matthias Klose ] + * Merge debian packaging r472:482 from openjdk-6: + - openjdk-6-jre-headless: Depend on icedtea-6-jre-jamvm, if it's + the default VM. + - Use gcj-4.4 as the stage1 java VM on mips and mipsel. + - Make JamVM the default VM on Ubuntu oneiric/ARM. + + -- Matthias Klose Thu, 04 Aug 2011 11:38:01 +0200 + +openjdk-7 (7~b147-2.0~pre1-1) experimental; urgency=low + + * New b147 code drop (OpenJDK7 RC1). + + [ Matthias Klose ] + * Fix build on sparc64. + * Recognize 32bit user space on sparc. + * Build shark using llvm-2.9. + + [ Damien Raude-Morvan ] + * d/patches/zero-jsr292-fixes.diff: Fixes on Zero/Shark for JSR 292 support + from Chris Phillips . + * d/generate-dfsg-zip.sh: Update for OpenJDK7 as a first step to get #623693 + fixed. + * d/patches/kfreebsd-*: WiP patches for GNU/kFreeBSD support + (not yet enabled by default). + + -- Matthias Klose Sun, 17 Jul 2011 16:08:51 +0200 + +openjdk-7 (7~b143-2.0~pre1-2) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Tue, 12 Jul 2011 14:30:01 +0200 + +openjdk-7 (7~b143-2.0~pre1-1ubuntu1) oneiric; urgency=low + + * Fix zero builds on non-ix86 architectures. + * Fix build on sparc. + * Build using jpeg8. + + -- Matthias Klose Tue, 12 Jul 2011 14:25:24 +0200 + +openjdk-7 (7~b143-2.0~pre1-1) experimental; urgency=low + + [ Damien Raude-Morvan ] + * New b143 code drop. + * Drop d/patches/7031385.diff: Merged upstream. + * Drop d/patches/jamvm-oj7.patch: Merged upstream. + * Manpages are now ja_JP.UTF-8 instead of ja_JP.eucJP + + [ Matthias Klose ] + * Apply fix for IcedTea issue #753, #757. + * Update s390 hotspot build fixes. + * Re-enable zero on i386. + + -- Matthias Klose Sun, 10 Jul 2011 14:28:17 +0200 + +openjdk-7 (7~b136-2.0~pre1-2) experimental; urgency=low + + * Disable zero on i386. + + -- Matthias Klose Sun, 29 May 2011 12:37:03 +0200 + +openjdk-7 (7~b136-2.0~pre1-1ubuntu1) oneiric; urgency=low + + * Upload to oneiric. + + -- Matthias Klose Sun, 29 May 2011 07:59:01 +0200 + +openjdk-7 (7~b136-2.0~pre1-1) experimental; urgency=low + + [ Matthias Klose ] + * Fix non-bootstrap builds. + * Merge debian packaging r469:472 from openjdk-6. + * Run jtreg tests using JamVM too. + * Don't run the jtreg tests with the NSS security provider enabled. + * Update JamVM to 20110528. + * Re-enable the zero build, keep the shark builds disabled. + + [ Damien Raude-Morvan ] + * Only apply jamvm-oj7.patch when jamvm build in enabled. + + -- Matthias Klose Sat, 28 May 2011 17:17:23 +0200 + +openjdk-7 (7~b136-1.14+debian1-1) experimental; urgency=low + + * New upstream release: Icedtea 1.14. + - debian/patches/jamvm-oj7.patch: support new instruction + (JVM_FindClassFromBootLoader) in JamVM. + - Makefile.am: Fix some missing depends between + patch and extract targets. + * debian/patches/nonreparenting-wm.diff: Update. + * Replace B-D on libxalan2-java by xsltproc for bootstrapping JMVTI. + * Don't use GCJ_SUFFIX=4.6 for sid/wheezy/oneiric as GCJ version + is not homogeneous between arch. + * Enable JamVM support: + - d/control: Add B-D on libtool. + + -- Damien Raude-Morvan Thu, 26 May 2011 23:03:56 +0200 + +openjdk-7 (7~b136-1.14~pre0-4) experimental; urgency=low + + * Re-add build dependency on fastjar. + * Fix dependency on liblcms2-2. + + -- Matthias Klose Sun, 08 May 2011 10:21:21 +0200 + +openjdk-7 (7~b136-1.14~pre0-3) experimental; urgency=low + + * Fix liblcms dependency for -jre-headless package. + + -- Damien Raude-Morvan Sat, 07 May 2011 17:20:15 +0200 + +openjdk-7 (7~b136-1.14~pre0-2ubuntu2) oneiric; urgency=low + + * Re-add build dependency on fastjar. + + -- Matthias Klose Sun, 08 May 2011 02:51:47 +0200 + +openjdk-7 (7~b136-1.14~pre0-2) experimental; urgency=low + + * Fix build failure on i386 with GCC 4.6. + + -- Matthias Klose Fri, 06 May 2011 17:10:00 +0200 + +openjdk-7 (7~b136-1.14~pre0-1) experimental; urgency=low + + [ Damien Raude-Morvan ] + * New b136 code drop: + - d/rules: Use jaxp-1_4_5-dev1.zip as jaxp-drop-zip. + - d/patches/icedtea-pretend-memory.diff: Refreshed. + + [ Matthias Klose ] + * Fix -jre-lib dependency on -jre. Closes: #624846. + * Add lcms configury. + + -- Matthias Klose Thu, 05 May 2011 21:08:55 +0200 + +openjdk-7 (7~b130-1.14~pre0-2) experimental; urgency=low + + * Remove obsolete conflicts. Closes: #624090. + * Add copyright for the rewriter class. Addresses part of #623693. + * Lower priorities for the alternatives below these of OpenJDK 6, + as long as OpenJDK 7 is not yet released. + * Don't build HotSpot with -Werror on architectures other than amd64 + and i386. + + -- Matthias Klose Wed, 27 Apr 2011 23:03:45 +0200 + +openjdk-7 (7~b130-1.14~pre0-1) experimental; urgency=low + + * New b130 code drop. + * Merge debian packaging r464:469 from openjdk-6. + * Do not bump the epoch, package was never uploaded to any official + repository. + + -- Matthias Klose Wed, 20 Apr 2011 21:46:32 +0200 + +openjdk-7 (1:7~b129-1.14~pre0-1) experimental; urgency=low + + * New b129 code drop. + * Bump epoch to 1 and use ~ to indicate that's not openjdk-7 final relaase. + + -- Damien Raude-Morvan Mon, 14 Feb 2011 00:34:45 +0100 + +openjdk-7 (7b128-1.14~pre0-1) UNRELEASED; urgency=low + + * New b128 code drop. + * Exclude "release" file for dh_install. + + -- Damien Raude-Morvan Mon, 07 Feb 2011 23:45:13 +0100 + +openjdk-7 (7b126-1.14~pre0-1) UNRELEASED; urgency=low + + * Merge debian packaging r446:464 from openjdk-6 + but keep the following changes : + - Replace DISABLE_PRECOMPILED_HEADER=1 by USE_PRECOMPILED_HEADER=0 + - Use "ant, ant-optionnal" for all distrel + - Drop "with_hotspot" variable (only one hotspot supported by IcedTea7) + - Drop --enable-xrender (not supported by IcedTea7) + * New b125 code drop: + - d/rules: Use new archives by --with-*-src-zip + * Refresh patches: + - d/patches/shebang.diff: Year updated + - d/patches/ld-symbolic-functions.diff and + d/patches/no-compiler-path.diff: Changed corba generic Makefiles. + - d/patches/default-jvm-cfg.diff and d/patches/set-exec-name.diff: + Upstream merged "solaris" and "linux" java.c and java_md.c + * Drop patches: + - d/patches/too-many-args-ftbfs.diff (merged upstream) + - d/patches/sparc.diff (merges upstream) + - d/patches/hotspot-include-fixes.diff (includeDB dropped upstream) + + -- Damien Raude-Morvan Mon, 24 Jan 2011 00:18:38 +0100 + +openjdk-7 (7b106~pre1-0lucid2) lucid; urgency=low + + * Build for lucid. + + -- Matthias Klose Thu, 09 Sep 2010 15:32:13 +0200 + +openjdk-7 (7b106~pre1-0ubuntu2) maverick; urgency=low + + * Build openjdk-7 snapshot (7b106) + * Symlink timezone data. + * Disable shark builds, currently broken in 7b106. + + -- Matthias Klose Tue, 07 Sep 2010 04:56:48 +0200 + +openjdk-7 (7b89-1.13-0ubuntu1) maverick; urgency=low + + * Update to the IcedTea 1.13 release. + * openjdk-7-jre: Recommend ttf-dejavu-extra. LP: #569396. + + -- Matthias Klose Fri, 30 Jul 2010 01:19:45 +0200 + +openjdk-7 (7b89~pre1-0lucid3) lucid; urgency=low + + * Include docs in the -doc package. LP: #600834. + * Update from the IcedTea6 trunk. + - Plugin and netx fixes. + - Don't link the plugin against the libxul libraries. Closes: #576361. + - More plugin cpu usage fixes. Closes: #584335, #587049. + - Plugin: fixes AppletContext.getApplets(). + * Fix Vcs-Bzr location. Closes: #530883. + * Search for unversioned llvm-config tool. + * Don't set XFILESEARCHPATH and NLSPATH on startup. LP: #586641. + * Fix chinese font metrics and prefer using 'WenQuanYi Micro Hei' font. + LP: #472845. + * Strip libjvm.so with --strip-debug instead of --strip-unneeded. + LP: #574997. + * Fix inter-package dependencies. + + -- Matthias Klose Thu, 15 Jul 2010 18:12:17 +0200 + +openjdk-7 (7b89~pre1-0lucid1) lucid; urgency=low + + [ Damien Raude-Morvan ] + * Merge debian packaging r403:430 from openjdk-6. + * Add myself to Uploaders. + * Build openjdk-7 snapshot (7b89) + * Use ant+ant-optional (IcedTea7 support ant 1.8). + * Merge debian packaging r431:436 from openjdk-6. + + [ Matthias Klose ] + * Merge debian packaging r430:445 from openjdk-6. + * Update debian patches to 7b89. + * Reenable the two stage build. + * Reenable building cacao. + * Reenable building zero. + + -- Matthias Klose Tue, 13 Jul 2010 10:32:11 +0200 + +openjdk-7 (7b77-0ubuntu1~ppa1) lucid; urgency=low + + * Build openjdk-7 snapshot (7b77). + * Merge debian packaging r391:403 from openjdk-6. + + -- Matthias Klose Mon, 21 Dec 2009 16:58:34 +0100 + +openjdk-7 (7b72-0ubuntu1~ppa1) karmic; urgency=low + + * Build openjdk-7 snapshot (7b72). + * Merge debian packaging r371:391 from openjdk-6. + * Disable the zero build for now. + + -- Matthias Klose Sat, 03 Oct 2009 16:35:27 +0200 + +openjdk-7 (7b66-0ubuntu1~ppa1) karmic; urgency=low + + * Build openjdk-7 snapshot (7b66). + * Merge debian packaging r362:371 from openjdk-6. + + -- Matthias Klose Thu, 06 Aug 2009 12:40:00 +0200 + +openjdk-7 (7b59-0ubuntu1) karmic; urgency=low + + * Reenable the build of zero. + * Reapply fontconfig patch. + * Apply icedtea-cacao-no-mmap-first-page patch. + + -- Matthias Klose Fri, 29 May 2009 10:19:26 +0200 + +openjdk-7 (7b59-0ubuntu1~ppa1) karmic; urgency=low + + * Build openjdk-7 snapshot (7b59). + * Merge debian packaging r205:362 from openjdk-6. + + -- Matthias Klose Wed, 27 May 2009 12:09:16 +0200 + +openjdk-7 (7b40-0ubuntu2) jaunty; urgency=low + + * Add build dependency on libxrender-dev. + * Don't use fastjar on ia64, working around a build failure. + * Add configury for shark builds. + + -- Matthias Klose Thu, 04 Dec 2008 16:26:15 +0100 + +openjdk-7 (7b40-0ubuntu1) jaunty; urgency=low + + * Build openjdk-7 snapshot (7b40). + * Update packaging for openjdk-7. + + -- Matthias Klose Tue, 02 Dec 2008 14:27:03 +0100 + +openjdk-6 (6b22-1.10.1-0ubuntu1) natty; urgency=low + + * IcedTea6 1.10.1 release. + + -- Matthias Klose Tue, 05 Apr 2011 12:20:36 +0200 + +openjdk-6 (6b22-1.10.1~pre1-1) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Sat, 26 Mar 2011 10:43:49 +0100 + +openjdk-6 (6b22-1.10.1~pre1-0ubuntu1) natty; urgency=low + + * Update from the IcedTea6-1.10 release branch (20110325). + * Add multiarch directories to the default library path. LP: #737603. + + -- Matthias Klose Fri, 25 Mar 2011 16:33:57 +0100 + +openjdk-6 (6b22-1.10-3) experimental; urgency=low + + * Fix JamVM build on mips/mipsel (Robert Lougher). + * Re-enable the JamVM build on mips/mipsel. + + -- Matthias Klose Sun, 06 Mar 2011 15:01:54 +0100 + +openjdk-6 (6b22-1.10-2) experimental; urgency=low + + * Mention that IcedTea is copyrigh GPLv2 + "CLASSPATH" EXCEPTION. + Closes: #611269. + * Don't run the jdk checks for the alternate builds (hotspot and + langtools checks are still run). + * Disable the JamVM build on mips/mipsel. + + -- Matthias Klose Sat, 05 Mar 2011 16:13:40 +0100 + +openjdk-6 (6b22-1.10-1) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Fri, 04 Mar 2011 16:12:50 +0100 + +openjdk-6 (6b22-1.10-0ubuntu2) natty; urgency=low + + * Disable the jdk tests with the Shark, JamVM and Cacao VMs. + + -- Matthias Klose Fri, 04 Mar 2011 15:32:50 +0100 + +openjdk-6 (6b22-1.10-0ubuntu1) natty; urgency=low + + * IcedTea6 1.10 release. + + -- Matthias Klose Thu, 03 Mar 2011 09:32:19 +0100 + +openjdk-6 (6b21~pre3-0ubuntu1) natty; urgency=low + + * Update from the IcedTea6 trunk (20110224). + * icedtea-6-jre-jamvm: Build JamVM as an alternative VM, + start with `java -jamvm'. + + -- Matthias Klose Thu, 24 Feb 2011 02:45:56 +0100 + +openjdk-6 (6b21~pre2-0ubuntu1) natty; urgency=low + + * Update from the IcedTea6 trunk (20110217). + * Update hotspot hs20 (not yet enabled). + * Add ppc64 packaging bits. + + -- Matthias Klose Fri, 18 Feb 2011 15:55:41 +0100 + +openjdk-6 (6b21~pre1-1) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Sat, 22 Jan 2011 15:34:21 +0100 + +openjdk-6 (6b21~pre1-0ubuntu1) natty; urgency=low + + * Update to 6b21. + + -- Matthias Klose Sat, 22 Jan 2011 14:28:28 +0100 + +openjdk-6 (6b20-1.10~pre3-0ubuntu4) natty; urgency=low + + * Fix shark build on powerpc. + + -- Matthias Klose Fri, 24 Dec 2010 11:06:32 +0100 + +openjdk-6 (6b20-1.10~pre3-0ubuntu3) natty; urgency=low + + * Update from the IcedTea6 trunk (20101223). + + -- Matthias Klose Thu, 23 Dec 2010 14:27:17 +0100 + +openjdk-6 (6b20-1.10~pre3-0ubuntu1) natty; urgency=low + + * Update from the IcedTea6 trunk (20101126). + * Update hotspot hs19. + * Fix build failures on ia64, s390 and sparc64. + + -- Matthias Klose Fri, 26 Nov 2010 16:38:16 +0100 + +openjdk-6 (6b20-1.10~pre2-0ubuntu7~ppa1) natty; urgency=low + + * Reenable shark on amd64, but build using llvm-2.7. + + -- Matthias Klose Thu, 21 Oct 2010 23:59:30 +0200 + +openjdk-6 (6b20-1.10~pre2-0ubuntu5) natty; urgency=low + + * Don't try to set up an alternative for javaws + + -- Matthias Klose Thu, 21 Oct 2010 17:38:48 +0200 + +openjdk-6 (6b20-1.10~pre2-0ubuntu3) natty; urgency=low + + * Stop building zero/shark on amd64. Fails the self tests. + + -- Matthias Klose Thu, 21 Oct 2010 13:49:56 +0200 + +openjdk-6 (6b20-1.10~pre2-0ubuntu2) natty; urgency=low + + * Don't include OpenJDK's javaws either. + * openjdk-6-jre: Recommend icedtea-netx. + + -- Matthias Klose Thu, 21 Oct 2010 08:34:07 +0200 + +openjdk-6 (6b20-1.10~pre2-0ubuntu1) natty; urgency=low + + * Update from the IcedTea6 trunk (20101020). + * Remove the plugin and javaws from the packaging, removed upstream. + + -- Matthias Klose Wed, 20 Oct 2010 17:45:09 +0200 + +openjdk-6 (6b20-1.10~pre1-0ubuntu2) natty; urgency=low + + * Build with hotspot 19. + + -- Matthias Klose Thu, 14 Oct 2010 11:28:38 +0200 + +openjdk-6 (6b20-1.10~pre1-0ubuntu1) natty; urgency=low + + * Snapshot, taken from the IcedTea6 trunk (20101013). + + -- Matthias Klose Wed, 13 Oct 2010 08:36:44 +0200 + +openjdk-6 (6b20-1.9.2-1) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Wed, 24 Nov 2010 05:29:43 +0100 + +openjdk-6 (6b20-1.9.2-0ubuntu1) maverick-security; urgency=low + + * IcedTea6 1.9.2 release. + - CVE-2010-3860: Fix IcedTea System property information leak via + public static. + * Build using Hotspot hs19. + * Start metacity using dbus-launch, when running the testsuite. LP: #632594. + + -- Matthias Klose Sun, 21 Nov 2010 18:30:39 +0100 + +openjdk-6 (6b20-1.9.1-1ubuntu3) maverick-security; urgency=low + + * Move all japanese man pages belonging to the jre into the -jre package. + Closes: #600765. + * Add -jdk replaces for -jre and -jre-headless. Closes: #600809. + + -- Matthias Klose Wed, 20 Oct 2010 12:51:34 +0200 + +openjdk-6 (6b20-1.9.1-1ubuntu1) maverick-security; urgency=low + + * Fix upgrade to symlinked timezone data. Closes: #600359. + * Move all japanese man pages belonging to the jre into the -jre package. + Closes: #600765. + + -- Matthias Klose Mon, 18 Oct 2010 16:07:48 +0200 + +openjdk-6 (6b20-1.9.1-1) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Tue, 12 Oct 2010 15:07:35 +0200 + +openjdk-6 (6b20-1.9.1-0ubuntu1) maverick-security; urgency=low + + * IcedTea6 1.9.1 release. + - Security updates: + - S6914943, CVE-2009-3555: TLS: MITM attacks via session renegotiation. + - S6559775, CVE-2010-3568: OpenJDK Deserialization Race condition. + - S6891766, CVE-2010-3554: OpenJDK corba reflection vulnerabilities. + - S6925710, CVE-2010-3562: OpenJDK IndexColorModel double-free. + - S6938813, CVE-2010-3557: OpenJDK Swing mutable static. + - S6957564, CVE-2010-3548: OpenJDK DNS server IP address information + leak. + - S6958060, CVE-2010-3564: OpenJDK kerberos vulnerability. + - S6963023, CVE-2010-3565: OpenJDK JPEG writeImage remote code execution. + - S6963489, CVE-2010-3566: OpenJDK ICC Profile remote code execution. + - S6966692, CVE-2010-3569: OpenJDK Serialization inconsistencies. + - S6622002, CVE-2010-3553: UIDefault.ProxyLazyValue has unsafe + reflection usage. + - S6623943: javax.swing.TimerQueue's thread occasionally fails to start. + - S6925672, CVE-2010-3561: Privileged ServerSocket.accept allows + receiving connections from any host. + - S6952017, CVE-2010-3549: HttpURLConnection chunked encoding issue + (Http request splitting). + - S6952603, CVE-2010-3551: NetworkInterface reveals local network + address to untrusted code. + - S6961084, CVE-2010-3541: limit setting of some request headers in + HttpURLConnection. + - S6963285, CVE-2010-3567: Crash in ICU Opentype layout engine due to + mismatch in character counts. + - S6980004, CVE-2010-3573: limit HTTP request cookie headers in + HttpURLConnection. + - S6981426, CVE-2010-3574: limit use of TRACE method in + HttpURLConnection. + - Plugin fixes. + - Backports from newer IcedTea releases. + + -- Matthias Klose Tue, 12 Oct 2010 12:13:40 +0200 + +openjdk-6 (6b20-1.9-1) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Tue, 07 Sep 2010 21:19:21 +0200 + +openjdk-6 (6b20-1.9-0ubuntu1) maverick; urgency=low + + * IcedTea6 1.9 release. + + -- Matthias Klose Tue, 07 Sep 2010 18:13:20 +0200 + +openjdk-6 (6b20~pre2-0ubuntu2) maverick; urgency=low + + * Update from the IcedTea6 trunk. + * Really let the build fail on armel. + + -- Matthias Klose Fri, 30 Jul 2010 16:55:38 +0200 + +openjdk-6 (6b20~pre2-0ubuntu1) maverick; urgency=high + + * Update from the IcedTea6 trunk. + - (CVE-2010-2783): IcedTea 'Extended JNLP Services' arbitrary file access. + - (CVE-2010-2548): IcedTea incomplete property access check for unsigned + applications + * openjdk-6-jre: Recommend ttf-dejavu-extra. LP: #569396. + * Explicitely fail the build on armel. The ARM assembler interpreter is + disabled and would a 3-5x performance regression compared to the current + 6b18 armel binaries in the archive. + + -- Matthias Klose Thu, 29 Jul 2010 00:10:53 +0200 + +openjdk-6 (6b20~pre1-2) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Thu, 15 Jul 2010 13:55:02 +0200 + +openjdk-6 (6b20~pre1-1ubuntu1) maverick; urgency=low + + * Include docs in the -doc package. LP: #600834. + * Update from the IcedTea6 trunk. + - Plugin and netx fixes. + - Don't link the plugin against the libxul libraries. Closes: #576361. + - More plugin cpu usage fixes. Closes: #584335, #587049. + - Plugin: fixes AppletContext.getApplets(). + * Fix Vcs-Bzr location. Closes: #530883. + * Search for unversioned llvm-config tool. + * Don't set XFILESEARCHPATH and NLSPATH on startup. LP: #586641. + * Fix chinese font metrics and prefer using 'WenQuanYi Micro Hei' font. + LP: #472845. + * Strip libjvm.so with --strip-debug instead of --strip-unneeded. + LP: #574997. + + -- Matthias Klose Thu, 15 Jul 2010 12:40:10 +0200 + +openjdk-6 (6b20~pre1-1) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Mon, 28 Jun 2010 00:50:58 +0200 + +openjdk-6 (6b20~pre1-0ubuntu2) maverick; urgency=low + + * Shark & CACAO build fixes. + + -- Matthias Klose Fri, 25 Jun 2010 02:27:10 +0200 + +openjdk-6 (6b20~pre1-0ubuntu1) maverick; urgency=low + + * Update to 6b20 code drop. + + -- Matthias Klose Wed, 14 Apr 2010 02:53:37 +0200 + +openjdk-6 (6b18-1.8-4) unstable; urgency=low + + * Update from the 1.8 branch. + - Plugin and netx fixes. + - Don't link the plugin against the libxul libraries. Closes: #576361. + - More plugin cpu usage fixes. Closes: #584335, #587049. + - Plugin: fixes AppletContext.getApplets(). + - Fix race conditions in plugin initialization code that were causing + hangs when loading multiple applets in parallel. + * Fix Vcs-Bzr location. Closes: #530883. + * Search for unversioned llvm-config tool. + * Don't set XFILESEARCHPATH and NLSPATH on startup. LP: #586641. + * Fix chinese font metrics and prefer using 'WenQuanYi Micro Hei' font. + LP: #472845. + * Strip libjvm.so with --strip-debug instead of --strip-unneeded. + LP: #574997. + * Don't turn on the ARM assembler interpreter when building the shark + VM. + + -- Matthias Klose Thu, 15 Jul 2010 00:40:13 +0200 + +openjdk-6 (6b18-1.8-3) unstable; urgency=low + + * Update from the 1.8 branch. + - Plugin fixes. LP: #597714. + * Add powerpcspe build fixes (Sebastian Andrzej Siewior). Closes: #586359. + * Work around build failure on buildds configured with low ARG_MAX + (Giovanni Mascellani). Closes: #575254. + + -- Matthias Klose Sun, 27 Jun 2010 10:16:27 +0200 + +openjdk-6 (6b18-1.8-2ubuntu3) maverick; urgency=low + + * Update from the 1.8 branch. + - Plugin fixes. LP: #597714. + * Add powerpcspe build fixes (Sebastian Andrzej Siewior). Closes: #586359. + * Work around build failure on buildds configured with low ARG_MAX + (Giovanni Mascellani). Closes: #575254. + + -- Matthias Klose Sun, 27 Jun 2010 10:16:27 +0200 + +openjdk-6 (6b18-1.8-2ubuntu2) maverick; urgency=low + + * Search for unversioned llvm-config tool. + + -- Matthias Klose Sun, 02 May 2010 12:03:01 +0200 + +openjdk-6 (6b18-1.8-2ubuntu1) maverick; urgency=low + + * Upload to maverick. + + -- Matthias Klose Sun, 02 May 2010 11:23:16 +0200 + +openjdk-6 (6b18-1.8-2) unstable; urgency=low + + * Update from the 1.8 branch. + - Fix build on Hitachi SH. Closes: #575346. + - Shark and Zero fixes. + * Build shark using llvm-2.7. + * Don't use shark to run the test harness when testing the shark build. + * README.Debian: Add paragraph about debugging the IcedTea NPPlugin. + + -- Matthias Klose Sat, 01 May 2010 12:35:19 +0200 + +openjdk-6 (6b18-1.8-1) unstable; urgency=low + + * Upload to unstable. + + -- Matthias Klose Wed, 14 Apr 2010 02:53:37 +0200 + +openjdk-6 (6b18-1.8-0ubuntu1) lucid; urgency=low + + * Update IcedTea6 to the icedtea6-1.8 release. + * Fix builds on Ubuntu/dapper and Debian/lenny. + * On hppa, configure --without-rhino --disable-plugin. + * Fix Hitachi SH configury. Closes: #575346. + * Start a window manager when running the tests. Prefer metacity, + as more tests pass with it. + * Let XToolkit.isTraySupported() return true, if Compiz is running. + Works around sun#6438179. LP: #300948. + * Make /jre/lib/security/nss.cfg a config file. + * Fail in the configuration of the packages, if /proc is not mounted. + java currently uses tricks to find its own shared libraries depending + on the path of the binary. Will be changed in OpenJDK7. Closes: #576453. + * Fix PR icedtea/469, testsuite failures with the NSS based security + provider. LP: #556549. + * Do not pass LD_LIBRARY_PATH from the plugin to the java process. + While libnss3.so gets loaded from /usr/lib, the dependent libraries + are loaded from MOZILLA_FIVE_HOME (See #561216 for the wrong firefox + config). LP: #561124. + Closes as well: LP: #551328, #554909, #560829, #549010, #553452. + * Always build shark with hs14. + + -- Matthias Klose Wed, 14 Apr 2010 01:53:33 +0200 + +openjdk-6 (6b18~pre4-1ubuntu1) lucid; urgency=low + + * Build-depend on xulrunner-1.9.2-dev instead of xulrunner-dev, + unexpectedly demoted to universe. + * icedtea6-plugin: Hardcode dependency on xulrunner-1.9.2. No way + to do better? See #552780. + * Fix builds on Ubuntu hardy. + + -- Matthias Klose Wed, 31 Mar 2010 22:21:49 +0200 + +openjdk-6 (6b18~pre4-1) unstable; urgency=high + + * Upload to unstable. + + -- Matthias Klose Wed, 31 Mar 2010 16:35:18 +0200 + +openjdk-6 (6b18~pre4-0ubuntu2) lucid; urgency=low + + * Fix typo in NPPlugin code. LP: #552287. + + -- Matthias Klose Wed, 31 Mar 2010 10:41:11 +0200 + +openjdk-6 (6b18~pre4-0ubuntu1) lucid; urgency=low + + [ Matthias Klose ] + * Update IcedTea6 form the 1.8 branch. + * SECURITY UPDATE: multiple upstream vulnerabilities. Upstream fixes: + - (CVE-2010-0837): JAR "unpack200" must verify input parameters (6902299). + - (CVE-2010-0845): No ClassCastException for HashAttributeSet constructors + if run with -Xcomp (6894807). + - (CVE-2010-0838): CMM readMabCurveData Buffer Overflow Vulnerability + (6899653). + - (CVE-2010-0082): Loader-constraint table allows arrays instead of + only the base-classes (6626217). + - (CVE-2010-0095): Subclasses of InetAddress may incorrectly interpret + network addresses (6893954) [ZDI-CAN-603]. + - (CVE-2010-0085): File TOCTOU deserialization vulnerability (6736390). + - (CVE-2010-0091): Unsigned applet can retrieve the dragged information + before drop action occurs (6887703). + - (CVE-2010-0088): Inflater/Deflater clone issues (6745393). + - (CVE-2010-0084): Policy/PolicyFile leak dynamic ProtectionDomains + (6633872). + - (CVE-2010-0092): AtomicReferenceArray causes SIGSEGV -> SEGV_MAPERR + error (6888149). + - (CVE-2010-0094): Deserialization of RMIConnectionImpl objects should + enforce stricter checks (6893947) [ZDI-CAN-588]. + - (CVE-2010-0093): System.arraycopy unable to reference elements + beyond Integer.MAX_VALUE bytes (6892265). + - (CVE-2010-0840): Applet Trusted Methods Chaining Privilege Escalation + Vulnerability (6904691). + - (CVE-2010-0848): AWT Library Invalid Index Vulnerability (6914823). + - (CVE-2010-0847): ImagingLib arbitrary code execution vulnerability + (6914866). + - (CVE-2009-3555): TLS: MITM attacks via session renegotiation. + - 6639665: ThreadGroup finalizer allows creation of false root + ThreadGroups. + - 6898622: ObjectIdentifer.equals is not capable of detecting incorrectly. + encoded CommonName OIDs. + - 6910590: Application can modify command array in ProcessBuilder. + - 6909597: JPEGImageReader stepX Integer Overflow Vulnerability. + - 6932480: Crash in CompilerThread/Parser. Unloaded array klass? + - 6898739: TLS renegotiation issue. + + [ Torsten Werner ] + * Switch off IPV6_V6ONLY for IN6_IS_ADDR_UNSPECIFIED addresses, too. + (Closes: #575163) + + -- Matthias Klose Wed, 31 Mar 2010 02:34:04 +0200 + +openjdk-6 (6b18~pre3-1) unstable; urgency=low + + [ Matthias Klose ] + * Update IcedTea build infrastructure (20100321). + * Update support for SH4 (Nobuhiro Iwamatsu). + * Handle renaming of the plugin name. + + [ Torsten Werner ] + * Improve patch for IPv4 mapped IPv6 addresses even more. + (Closes: #573742) + + -- Matthias Klose Sun, 21 Mar 2010 22:52:12 +0100 + +openjdk-6 (6b18~pre2-1ubuntu2) lucid; urgency=low + + * Fix build failure on ARM. + + -- Matthias Klose Fri, 12 Mar 2010 15:19:13 +0100 + +openjdk-6 (6b18~pre2-1ubuntu1) lucid; urgency=low + + * Upload to lucid. + + -- Matthias Klose Wed, 10 Mar 2010 23:34:57 +0100 + +openjdk-6 (6b18~pre2-1) unstable; urgency=low + + * Update IcedTea build infrastructure (20100310). + * Disable building the plugin the plugin on alpha (borked xulrunner + packaging using binary indep packages). + * Use a two stage build on alpha. + * Add note about the reparenting WM workaround. Closes: #573026. + * Prefer Sazanami instead of Kochi for Japanese fonts (Hideki Yamane). + Closes: #572511. + * openjdk-6-doc: Don't compress package-list files. Closes: #567899. + + -- Matthias Klose Wed, 10 Mar 2010 11:19:19 +0100 + +openjdk-6 (6b18~pre1-4) unstable; urgency=low + + * Improve patch for IPv4 mapped IPv6 addresses. + + -- Torsten Werner Sun, 07 Mar 2010 01:14:36 +0100 + +openjdk-6 (6b18~pre1-3) unstable; urgency=low + + * Add a patch for improved handling of IPv4 mapped IPv6 addresses. + (Closes: #560056, #561930, #563699, #563946) + + -- Torsten Werner Tue, 02 Mar 2010 23:46:57 +0100 + +openjdk-6 (6b18~pre1-2) unstable; urgency=low + + * Change Build-Depends: ant1.7-optional because of a bus error in gij. + + -- Torsten Werner Mon, 01 Mar 2010 07:17:16 +0100 + +openjdk-6 (6b18~pre1-1ubuntu1) lucid; urgency=low + + * Ignore error code running ant -diagnostics. + * Build-depend on ant-optional. + * Disable the cacao build on armel, fails to build with the non + bootstrap build. + + -- Matthias Klose Sat, 20 Feb 2010 15:36:06 +0100 + +openjdk-6 (6b18~pre1-1) unstable; urgency=low + + * Upload to unstable. + + -- Matthias Klose Fri, 19 Feb 2010 21:52:32 +0100 + +openjdk-6 (6b18~pre1-0ubuntu1) lucid; urgency=low + + * New Openjdk6 b18 source code drop. + * Use mangled copy of rhino. Closes: #512970. LP: #255149. + + -- Matthias Klose Fri, 19 Feb 2010 18:17:23 +0100 + +openjdk-6 (6b17-1.7-1ubuntu1) lucid; urgency=low + + * ARM Thumb2 updates. + * Test build using Hotspt hs14 on ix86. + + -- Matthias Klose Sun, 31 Jan 2010 21:56:59 +0100 + +openjdk-6 (6b18~pre1-1) unstable; urgency=low + + * Upload to unstable. + + -- Matthias Klose Fri, 19 Feb 2010 21:52:32 +0100 + +openjdk-6 (6b18~pre1-0ubuntu1) lucid; urgency=low + + * New Openjdk6 b18 source code drop. + * Use mangled copy of rhino. Closes: #512970. LP: #255149. + + -- Matthias Klose Fri, 19 Feb 2010 18:17:23 +0100 + +openjdk-6 (6b17-1.7-1ubuntu1) lucid; urgency=low + + * ARM Thumb2 updates. + * Test build using Hotspt hs14 on ix86. + + -- Matthias Klose Sun, 31 Jan 2010 21:56:59 +0100 + +openjdk-6 (6b17-1.7-1) unstable; urgency=low + + * Upload to unstable. + + -- Matthias Klose Wed, 27 Jan 2010 23:44:47 +0100 + +openjdk-6 (6b17-1.7-0ubuntu1) lucid; urgency=low + + * IcedTea6 1.7 release. + * Don't try to load libjpeg7; still building with libjpeg62. Closes: #563999. + * Run the testsuite on sh4. + * Ubuntu only: Implement an execute bit checker for the Non-Exec Policy + - debian/JB-java.desktop.in: update mime handler to use new launcher. + * armel: Apply the thumb2 patches from the trunk, plus proposed patches + for the trunk. + + -- Matthias Klose Wed, 27 Jan 2010 22:48:24 +0100 + +openjdk-6 (6b17-0ubuntu1) lucid; urgency=low + + * Build from the IcedTea6-1.7 branch. + * Don't build the plugin on sparc64. + * Enable the NPPlugin. + * Add support for SH4 (Nobuhiro Iwamatsu). + * Fix crash in the ARM assembler interpreter (Edward Nevill). + + -- Matthias Klose Wed, 06 Jan 2010 15:52:50 +0100 + +openjdk-6 (6b17~pre3-1ubuntu2) lucid; urgency=low + + * Update IcedTea build infrastructure (20091224). + * Explicitely build-depend on x11-xkb-utils (xkbcomp is needed by + xvfb-run). + + -- Matthias Klose Thu, 24 Dec 2009 12:43:00 +0100 + +openjdk-6 (6b17~pre3-1ubuntu1) lucid; urgency=low + + * Upload to lucid. + + -- Matthias Klose Fri, 18 Dec 2009 10:40:05 +0100 + +openjdk-6 (6b17~pre3-1) unstable; urgency=low + + * Update IcedTea build infrastructure (20091218). + * Install docs into the openjdk-6-jre-headless directory instead of + openjdk-6-jre. + + -- Matthias Klose Fri, 18 Dec 2009 10:00:08 +0100 + +openjdk-6 (6b17~pre2-1ubuntu1) lucid; urgency=low + + * Update IcedTea build infrastructure (20091215). + * Fix cacao build on armel with current optimization defaults. + + -- Matthias Klose Tue, 15 Dec 2009 16:41:12 +0100 + +openjdk-6 (6b17~pre2-1) unstable; urgency=low + + * Upload to unstable. + + -- Matthias Klose Mon, 09 Nov 2009 21:50:52 +0100 + +openjdk-6 (6b17~pre2-0ubuntu3) lucid; urgency=low + + * Security updates: + - (CVE-2009-3728) ICC_Profile file existence detection information leak + (6631533). + - (CVE-2009-3885) BMP parsing DoS with UNC ICC links (6632445). + - (CVE-2009-3881) resurrected classloaders can still have children + (6636650). + - (CVE-2009-3882) Numerous static security flaws in Swing (findbugs) + (6657026). + - (CVE-2009-3883) Mutable statics in Windows PL&F (findbugs) (6657138). + - (CVE-2009-3880) UI logging information leakage (6664512). + - (CVE-2009-3879) GraphicsConfiguration information leak (6822057). + - (CVE-2009-3884) zoneinfo file existence information leak (6824265). + - (CVE-2009-2409) deprecate MD2 in SSL cert validation (Kaminsky) (6861062). + - (CVE-2009-3873) JPEG Image Writer quantization problem (6862968). + - (CVE-2009-3875) MessageDigest.isEqual introduces timing attack + vulnerabilities (6863503). + - (CVE-2009-3876, CVE-2009-3877) OpenJDK ASN.1/DER input stream parser + denial of service (6864911). + - (CVE-2009-3869) JRE AWT setDifflCM stack overflow (6872357). + - (CVE-2009-3874) ImageI/O JPEG heap overflow (6874643. + - (CVE-2009-3871) JRE AWT setBytePixels heap overflow (6872358). + * Update IcedTea build infrastructure (20091109). + * Use hs16 on armel. + + -- Matthias Klose Mon, 09 Nov 2009 17:48:43 +0100 + +openjdk-6 (6b17~pre2-0ubuntu2) lucid; urgency=low + + * Don't use hs16 on armel and sparc. + + -- Matthias Klose Mon, 02 Nov 2009 15:33:00 +0100 + +openjdk-6 (6b17~pre2-0ubuntu1) lucid; urgency=low + + * New code drop (b17). + * Bump hotspot to hs16. + * Update IcedTea build infrastructure (20091031). + * Set priority of default -jre and -jdk packages to optional. + * Fix binary-all to binary-any dependencies. Closes: #550680. + + -- Matthias Klose Sat, 31 Oct 2009 19:30:54 +0100 + +openjdk-6 (6b16-1.6.1-2) unstable; urgency=medium + + * Build-depend on xulrunner-dev (>= 1.9.1.3-3). + + -- Matthias Klose Sun, 11 Oct 2009 21:34:48 +0200 + +openjdk-6 (6b16-1.6.1-1ubuntu3) karmic; urgency=low + + [Matthias Klose] + * On armel and powerpc, build an additional VM using shark in the + openjdk-6-jre-zero package (java -shark ). Requires llvm-2.6. + * Hide the desktop menu entry for WebStart. LP: #222180. + * Don't provide java-virtual-machine anymore. + + [Edward Nevill] + * Avoid stack overflows in the arm interpreter. + + -- Matthias Klose Thu, 08 Oct 2009 12:41:46 +0200 + +openjdk-6 (6b16-1.6.1-1ubuntu2) karmic; urgency=low + + * Support PKCS11 cryptography via NSS, now allowing import of all + certificates from ca-certificates. + * Remove Michael Koch from uploaders, request by himself. + * Add the doc dir symlink for openjdk-6-jre-zero when the package + is built with shark support. + + -- Matthias Klose Mon, 28 Sep 2009 21:55:08 +0200 + +openjdk-6 (6b16-1.6.1-1ubuntu1) karmic; urgency=low + + * Fix dependency on the java bridge packages. + * debian/rules: Conditionalize stuff so that the recent release + is never mentioned. + * Remove obsolete patches in debian/patches. + * Rebuild on armel to fix up libffi for the soft float abi. + * For jaunty builds, fix IcedTeaPlugin failure to start with xulrunner 1.9.1 + (LP: #359407). + - debian/patches/icedtea-plugin-use-runtime-nsIProcess-IID.diff: Add. + - debian/rules: Apply it for jaunty builds. + * Use pulseaudio as default serviceprovider for + javax.sound.midi.MidiSystem and javax.sound.sampled.AudioSystem. + LP: #407299. + + -- Matthias Klose Sat, 26 Sep 2009 16:01:48 +0200 + +openjdk-6 (6b16-1.6.1-1) unstable; urgency=low + + * Upload to Debian unstable. + + -- Matthias Klose Tue, 15 Sep 2009 02:17:03 +0200 + +openjdk-6 (6b16-1.6.1-0ubuntu1) karmic; urgency=low + + * Update IcedTea6 to the 1.6.1 release. + * Work around GCC PR target/41327, build the JDK on s390 with -O2. + + -- Matthias Klose Thu, 10 Sep 2009 01:55:08 +0200 + +openjdk-6 (6b16-1.6-1) unstable; urgency=low + + * Update IcedTea6 to the 1.6 release. + * Fix GCC build dependencies. + + -- Matthias Klose Wed, 09 Sep 2009 22:18:38 +0200 + +openjdk-6 (6b16-1.6~pre2-1) unstable; urgency=low + + * Upload to unstable. + + -- Matthias Klose Fri, 28 Aug 2009 19:04:31 +0200 + +openjdk-6 (6b16-1.6~pre2-0ubuntu1) karmic; urgency=low + + * Update IcedTea from the 1.6 release branch: + - Fix buffer overflow in debugger's socket handler (Kees Cook). + https://bugs.openjdk.java.net/show_bug.cgi?id=100103. LP: #409736. + - plugin fixes. + * Move the pulseaudio recommendation to a suggestion, don't build-depend + on pulseaudio. Closes: #539394. LP: #361408. + * Build for armv6 (on armel). + + [ Kees Cook ] + * debian/rules: Re-enable fortification and stack protector + (LP: #330713). + * Adding stack markings to the x86 assembly for not using executable + stack. LP: #419018. + + -- Matthias Klose Fri, 28 Aug 2009 18:51:34 +0200 + +openjdk-6 (6b16-1.6~pre1-0ubuntu1) karmic; urgency=low + + * Test build (icedtea6-1.6 release branch). + + -- Matthias Klose Fri, 21 Aug 2009 19:44:42 +0200 + +openjdk-6 (6b16~pre5-0ubuntu2) karmic; urgency=low + + * Add explicit build dependency on libgtk2.0-dev. + + -- Matthias Klose Thu, 06 Aug 2009 11:39:14 +0200 + +openjdk-6 (6b16~pre5-0ubuntu1) karmic; urgency=low + + * Bump hotspot to hs14b16. + * Update IcedTea build infrastructure (20090805). + * patches/java-access-bridge-security.patch: Update. + * Build-depend on xulrunner-dev instead of xulrunner-1.9-dev on karmic. + * Don't recommend the jck fonts anymore, just suggest them; the appropriate + fonts are installed as dependencies of the language packs. + + -- Matthias Klose Thu, 06 Aug 2009 10:27:09 +0200 + +openjdk-6 (6b16~pre4-0ubuntu7) karmic; urgency=low + + * Build using GCC-4.4 on sparc as well, require 4.4.1. + + -- Matthias Klose Thu, 23 Jul 2009 18:23:14 +0200 + +openjdk-6 (6b16~pre4-0ubuntu6) karmic; urgency=low + + * Fix build failure building the zero VM. + + -- Matthias Klose Thu, 16 Jul 2009 09:49:36 -0400 + +openjdk-6 (6b16~pre4-0ubuntu5) karmic; urgency=low + + [Matthias Klose] + * Update IcedTea build infrastructure (20090715). + * Tighten build dependency on llvm-dev. + + [Edward Nevill] + * Add armv4 compatibility. + + -- Matthias Klose Wed, 15 Jul 2009 15:40:44 -0400 + +openjdk-6 (6b16~pre4-0ubuntu4) karmic; urgency=low + + [Edward Nevill] + * Added Bytecode Interpreter Generator. + * Added ARM templates for above. + * Removed old optimised ARM assebler. + * Added -g0 because of problems with ld linking -g. + * Changed alignment to 64 now that as bug is fixed. + + [Matthias Klose] + * Update IcedTea build infrastructure (20090710). + * Let the -jre package depend on the access-bridge package, not the + -jre-headless package. LP: #395074. + * Suggested by Ed Nevill: + - Pass -timeout:3 when running the jtreg testsuite on zero architectures. + - Pass -Xmx256M -vmoption:-Xmx256M on armel for the jtreg testsuite run. + * Tighten build dependency on llvm-dev. + + -- Matthias Klose Fri, 03 Jul 2009 18:32:50 +0200 + +openjdk-6 (6b16~pre4-0ubuntu3) karmic; urgency=low + + * Update zero-port-opt patch on armel. + + -- Matthias Klose Wed, 24 Jun 2009 10:48:48 +0200 + +openjdk-6 (6b16~pre4-0ubuntu2) karmic; urgency=low + + * Update IcedTea build infrastructure (20090623). + * Reapply the zero-port-opt patch on armel. + * Do not use the IPA Mona font family by default. Closes: #521233. + * Build cacao with -fno-strict-aliasing. + + -- Matthias Klose Tue, 23 Jun 2009 16:23:38 +0200 + +openjdk-6 (6b16-4) unstable; urgency=medium + + * Build the zero binary package when building with shark. + * Build-depend on cpio. Closes: #532963. + + -- Matthias Klose Tue, 16 Jun 2009 07:52:19 +0200 + +openjdk-6 (6b16-3) unstable; urgency=low + + * Update IcedTea build infrastructure (20090612). + * Install the libaccess-bridge-java* symlinks again. + * Build zero on ix86 architectures with JIT support (shark). To use the zero + build without shark, use the `-Xint' option to operate in interpreted-only + mode. + + -- Matthias Klose Fri, 12 Jun 2009 17:31:34 +0200 + +openjdk-6 (6b16-2) unstable; urgency=low + + * Don't install libaccess-bridge-java* symlinks until + libaccess-bridge-java-jni is available on all architectures. + * Add missing build dependency on cacao-source. + + -- Matthias Klose Mon, 18 May 2009 14:02:59 +0200 + +openjdk-6 (6b16-1) unstable; urgency=low + + * Upload to unstable, based in 6b16 and IcedTea 1.5. + + -- Matthias Klose Sun, 17 May 2009 23:02:46 +0200 + +openjdk-6 (6b16~pre3-0ubuntu1) karmic; urgency=low + + * Update to hotspot hs14b15. + * Provide symlink for libjava-access-bridge-jni.so. LP: #375347. + + -- Matthias Klose Fri, 15 May 2009 00:41:24 +0200 + +openjdk-6 (6b16~pre2-0ubuntu3) karmic; urgency=low + + * Update IcedTea build infrastructure (20090513). + * Fix build failure when xvfb-run doesn't work, trying to access a + non-existing directory. + + -- Matthias Klose Wed, 13 May 2009 23:01:23 +0200 + +openjdk-6 (6b16~pre2-0ubuntu2) karmic; urgency=low + + * Add libffi-dev as architecture independent build dependency. + + -- Matthias Klose Mon, 11 May 2009 08:41:42 +0200 + +openjdk-6 (6b16~pre2-0ubuntu1) karmic; urgency=low + + * Update to re-tagged code drop (b16). + * Update IcedTea build infrastructure (20090510). + * Remove patches integrated in IcedTea. + * Remove GCJ Web Plugin support. + * Remove build infrastructure to build additional VM's, integrated + in IcedTea. + * Stop building the openjdk-6-source-files package. + * README.Debian: Document using the different VM's. + * Use GCC-4.3 on sparc, ICE with GCC-4.4. + * Fix problem with the ARM assembler interpreter, when executing a 'new' + bytecode with a double on the top of the stack (Edward Nevill). + * Run the testsuite for the zero build on ix86 architectures. + + -- Matthias Klose Sun, 10 May 2009 23:37:42 +0200 + +openjdk-6 (6b16~pre1-0ubuntu1) karmic; urgency=low + + * New code drop (b16). + * Update IcedTea build infrastructure (20090429). + * Merge changes from 6b14-1.4.1. + * Fix section names (using the java section). + * Remove all UTF-8 sequence definitions from the font configuration. + + -- Matthias Klose Wed, 29 Apr 2009 11:33:07 +0200 + +openjdk-6 (6b14-1.4.1-0ubuntu9) jaunty; urgency=low + + * Reenable the testsuite (revert the change in last upload). + * Apply fix for the ARM bytecode interpreter (Edward Nevill). + + -- Matthias Klose Sat, 18 Apr 2009 11:24:27 +0200 + +openjdk-6 (6b14-1.4.1-0ubuntu7) jaunty; urgency=low + + * Don't use some indian fonts with diverging font metrics for the + latin-1.UTF-8 encoding. LP: #289784. + * Disable running the testsuite for this build (no code changes compared + to the previous upload). + + -- Matthias Klose Tue, 14 Apr 2009 11:46:25 +0200 + +openjdk-6 (6b14-1.4.1-0ubuntu6) jaunty; urgency=low + + * Fix native2ascii jdk test case, which let the jdk testsuite fail. + + -- Matthias Klose Fri, 10 Apr 2009 11:58:44 +0200 + +openjdk-6 (6b14-1.4.1-0ubuntu5) jaunty; urgency=low + + [Matthias Klose] + * Update to the final CACAO 0.99.4 release. + * Security Vulnerability Fixes for OpenJDK: + - 6522586: Enforce limits on Font creation. + - 6536193: flaw in UTF8XmlOutput. + - 6610888: Potential use of cleared of incorrect acc in JMX Monitor. + - 6610896: JMX Monitor handles thread groups incorrectly. + - 6630639: lightweight HttpServer leaks file descriptors on no-data + connections. + - 6632886: Font.createFont can be persuaded to leak temporary files. + - 6636360: compiler/6595044/Main.java test fails with 64bit java on + solaris-sparcv9 with SIGSEGV. + - 6652463: MediaSize constructors allow to redefine the mapping of + standard MediaSizeName values. + - 6652929: Font.createFont(int,File) trusts File.getPath. + - 6656633: getNotificationInfo methods static mutable (findbugs). + - 6658158: Mutable statics in SAAJ (findbugs). + - 6658163: txw2.DatatypeWriter.BUILDIN is a mutable static (findbugs). + - 6691246: Thread context class loader can be set using JMX remote + ClientNotifForwarded. + - 6717680: LdapCtx does not close the connection if initialization fails. + - 6721651: Security problem with out-of-the-box management. + - 6737315: LDAP serialized data vulnerability. + - 6792554: Java JAR Pack200 header checks are insufficent. + - 6804996: JWS PNG Decoding Integer Overflow [V-flrhat2ln8]. + - 6804997: JWS GIF Decoding Heap Corruption [V-r687oxuocp]. + - 6804998: JRE GIF Decoding Heap Corruption [V-y6g5jlm8e1]. + * Add security patch for the lcms library. + * Add accessibility patches java-access-bridge-security.patch and + accessible-toolkit.patch. + * Merge fixes for testsuite failures from the IcedTea6 branch. + * Merge the proxy support for the plugin from the IcedTea6 branch. + * Merge http://icedtea.classpath.org/hg/release/icedtea6-1.4.1/rev/546ef0cdee06 + (TJ). LP: #344705. + * Add a Xb-Npp-Description for the IcedTea plugin. LP: #272010. + + [Edward Nevill] + * Put VFP back in - selects VFP / novfp autmatically + * More assembler optimisations + + -- Matthias Klose Thu, 09 Apr 2009 14:14:12 +0200 + +openjdk-6 (6b14-1.4.1-0ubuntu4) jaunty; urgency=low + + * Disable the additional zero JVM on sparc. + * patches/hotspot/default/icedtea-includedb.patch: Add missing include in + openjdk/hotspot/src/share/vm/includeDB_core. + * Fix build failure of the zero VM on lpia with a fixed GCC. + + -- Matthias Klose Fri, 13 Mar 2009 16:39:27 +0100 + +openjdk-6 (6b14-1.4.1-0ubuntu3) jaunty; urgency=low + + * Build the Zero/Shark VM as an additional JVM (call as `java -zero'). + + -- Matthias Klose Sat, 07 Mar 2009 20:54:28 +0100 + +openjdk-6 (6b14-1.4.1-0ubuntu2) jaunty; urgency=low + + * Fix zero-port-opt patching (build failure on armel). + + -- Matthias Klose Thu, 05 Mar 2009 18:19:18 +0100 + +openjdk-6 (6b14-1.4.1-0ubuntu1) jaunty; urgency=low + + * Update IcedTea to the 1.4.1 release. + * Build the Cacao VM as an additional JVM (call as `java -cacao'). + * Build in separate build directory. + + -- Matthias Klose Thu, 05 Mar 2009 15:16:02 +0100 + +openjdk-6 (6b14-1.5~pre1-5) unstable; urgency=low + + * Fix build failure on armel. + * Require the final cacao-0.99.4 release. + * Add /usr/lib/jni to the library path. Closes: #517338. + + -- Matthias Klose Tue, 17 Mar 2009 09:37:20 +0100 + +openjdk-6 (6b14-1.5~pre1-4) unstable; urgency=low + + * Disable the additional zero JVM on sparc. + * Fix casts in hotspot on s390. Closes: #518823. + * Add special flags for javac on s390 to work around a VM problem with bad + code generation during inlining. + * Run the testsuites for the default VM on all architectures. + * Update IcedTea (20090314). + + -- Matthias Klose Sat, 14 Mar 2009 18:29:49 +0100 + +openjdk-6 (6b14-1.5~pre1-3) unstable; urgency=low + + * Don't configure the additional zero JVM with --enable-shark, currently + fails to build. + * Don't build the JDK when building the additional zero JVM. + + -- Matthias Klose Sat, 07 Mar 2009 21:11:16 +0100 + +openjdk-6 (6b14-1.5~pre1-2) experimental; urgency=low + + * Build the Zero/Shark VM as an additional JVM (call as `java -zero'). + + -- Matthias Klose Fri, 06 Mar 2009 11:16:07 +0100 + +openjdk-6 (6b14-1.5~pre1-0ubuntu1) jaunty; urgency=low + + * Update hotspot to 14.0-b10. + * Update IcedTea (20090305). + * Build the Cacao VM as an additional JVM (call as `java -cacao'). + * Build in separate build directory. + + -- Matthias Klose Thu, 05 Mar 2009 15:16:02 +0100 + +openjdk-6 (6b14-0ubuntu17) jaunty; urgency=low + + [ Edward Nevill ] + * Remove VFP from asm loop + * Disble the mauve testsuite for armel. + + [Matthias Klose] + * Update IcedTea (20090302). + + -- Matthias Klose Mon, 02 Mar 2009 16:18:01 +0100 + +openjdk-6 (6b14-0ubuntu16) jaunty; urgency=low + + * Regenerate auto files. + + -- Matthias Klose Wed, 18 Feb 2009 15:20:10 +0100 + +openjdk-6 (6b14-0ubuntu15) jaunty; urgency=low + + [ Edward Nevill ] + * Added ARM assembler interpreter loop + * mauve and jtreg removed again for alpha release + + [Matthias Klose] + * Update IcedTea (20090218). + + -- Matthias Klose Wed, 18 Feb 2009 13:35:02 +0100 + +openjdk-6 (6b14-0ubuntu14) jaunty; urgency=low + + * Configure with --disable-nio2 on armel as well. + + -- Matthias Klose Fri, 13 Feb 2009 10:13:55 +0100 + +openjdk-6 (6b14-0ubuntu13) jaunty; urgency=low + + * Really configure with --disable-nio2. + + -- Matthias Klose Thu, 12 Feb 2009 17:26:43 +0100 + +openjdk-6 (6b14-0ubuntu12) jaunty; urgency=low + + * Configure with --disable-nio2. + * Run mauve and jtreg testsuites on armel. + + -- Matthias Klose Wed, 11 Feb 2009 13:00:15 +0100 + +openjdk-6 (6b14-0ubuntu11) jaunty; urgency=low + + [Edward Nevill] + * Performance improvements for the zero build (currently applied + on armel only). + + [Matthias Klose] + * Update IcedTea (20090210). + + -- Matthias Klose Tue, 10 Feb 2009 15:29:22 +0100 + +openjdk-6 (6b14-0ubuntu10) jaunty; urgency=low + + * Explicitely remove PulseAudioMuteControl.java. + + -- Matthias Klose Mon, 26 Jan 2009 22:09:21 +0100 + +openjdk-6 (6b14-0ubuntu9.1) jaunty; urgency=low + + * Test build. + + -- Matthias Klose Sun, 25 Jan 2009 17:03:51 +0100 + +openjdk-6 (6b14-0ubuntu9) jaunty; urgency=low + + * Update IcedTea build infrastructure (20090125). + * Run the jtreg testsuite for cacao builds, save all test logs. + + -- Matthias Klose Sun, 25 Jan 2009 15:40:52 +0100 + +openjdk-6 (6b14-0ubuntu8) jaunty; urgency=low + + * Fix merge error, don't apply patches twice. + + -- Matthias Klose Mon, 19 Jan 2009 01:15:19 +0100 + +openjdk-6 (6b14-0ubuntu7) jaunty; urgency=low + + * debian/rules: Call dh_desktop. LP: #309999. + * Add dependency on libjpeg62 for the -headless package. LP: #318383. + * Test some jtreg tests which fail in samevm mode in a separate VM. + * Build all with -fno-stack-protector -U_FORTIFY_SOURCE. + * Include jtr files of failed tests in the -jdk package. + + -- Matthias Klose Mon, 19 Jan 2009 00:23:22 +0100 + +openjdk-6 (6b14-0ubuntu6) jaunty; urgency=low + + * The -source package now contains all source files. Closes: #504568. + * The 6b14 build fixes the following security related issues (sun bug number, + CVE, description): + - 6588160, CVE-2008-5348: jaas krb5 client leaks OS-level UDP sockets. + - 6497740, CVE-2009-5349: Limit the size of RSA public keys. + - 6484091, CVE-2008-5350: FileSystemView leaks directory info. + - 4486841, CVE-2008-5351: UTF-8 decoder needed adhere to Unicode 3.0.1 + fixes. + - 6755943, CVE-2008-5352: JAR decompression should enforce stricter header + checks. + - 6734167, CVE-2008-5353: Calendar.readObject allows elevation of + privileges. + - 6733959, CVE-2008-5354: Insufficient checks for "Main-Class" manifest + entry in JAR files + - 6751322, CVE-2008-5356: Sun Java JRE TrueType Font Parsing Heap Overflow. + - 6733336, CVE-2008-5357: Crash on malformed font. + - 6766136, CVE-2008-5358: corrupted gif image may cause crash in java + splashscreen library. + - 6726779, CVE-2008-5359: ConvolveOp on USHORT raster can cause the JVM + crash. + - 6721753, CVE-2008-5360: File.createTempFile produces guessable file names. + - 6592792: Add com.sun.xml.internal to the "package.access" property in + $JAVA_HOME/lib/security/java.security. + * Regenerate the control file. + + -- Matthias Klose Tue, 13 Jan 2009 15:04:36 +0100 + +openjdk-6 (6b14-0ubuntu2~ppa1) intrepid; urgency=low + + * Upload to the OpenJDK PPA for intrepid. + + -- Matthias Klose Tue, 13 Jan 2009 13:28:38 +0100 + +openjdk-6 (6b14-0ubuntu5) jaunty; urgency=low + + * Update IcedTea build infrastructure (20090113). + * Rebuild with updated nss/nspr packages. + * Update debug patches. + * debian/patches/nonreparenting-wm.diff: If the _JAVA_AWT_WM_NONREPARENTING + environment variable is set, disable all workarounds causing blank windows + in non-reparentizing window managers (Bernhard R. Link). Closes: #508650. + * Fix location of plugin for Debian. Closes: #505726. + * Let the -jdk package provide java-compiler. Closes: #507641. + + -- Matthias Klose Tue, 13 Jan 2009 10:18:44 +0100 + +openjdk-6 (6b14-0ubuntu4) jaunty; urgency=low + + * Use a default jvm.cfg not only for java, but for all jdk tools. + LP: #288616. + * Update IcedTea build infrastructure (20081223). + + -- Matthias Klose Tue, 23 Dec 2008 09:24:23 +0100 + +openjdk-6 (6b14-0ubuntu3) jaunty; urgency=low + + * Update IcedTea build infrastructure (20081217). + * Add support for PARISC. + * Use a default jvm.cfg if the jvm.cfg doesn't yet exist after unpacking + the runtime package. LP: #288616. + + -- Matthias Klose Wed, 17 Dec 2008 09:58:26 +0100 + +openjdk-6 (6b14~pre1-0ubuntu2) jaunty; urgency=low + + * Install hotspot tarball in -source-files package. + * Fix build failure on sparc. + + -- Matthias Klose Fri, 05 Dec 2008 09:43:51 +0100 + +openjdk-6 (6b14~pre1-0ubuntu1) jaunty; urgency=low + + * New code drop (b14). + * Update IcedTea build infrastructure (20081204). + + -- Matthias Klose Thu, 04 Dec 2008 11:40:56 +0100 + +openjdk-6 (6b13~pre2-0ubuntu2) jaunty; urgency=low + + * Update IcedTea build infrastructure (20081203). + - Fix build failures on zero based architectures. + * Add build dependency on libxrender-dev. + * Don't use fastjar on ia64, working around a build failure. + + -- Matthias Klose Wed, 03 Dec 2008 18:43:23 +0100 + +openjdk-6 (6b13~pre2-0ubuntu1) jaunty; urgency=low + + * Update IcedTea build infrastructure (20081202). + - Add Dec 3 OpenJDK security patches + * Build with --with-hotspot-build, update patches for this config. + + -- Matthias Klose Wed, 03 Dec 2008 01:05:54 +0100 + +openjdk-6 (6b13~pre1-0ubuntu4) jaunty; urgency=low + + * Update IcedTea build infrastructure (20081122). + - Fixes for the IcedTeaPlugin. LP: #300254. + + -- Matthias Klose Sat, 22 Nov 2008 10:42:10 +0100 + +openjdk-6 (6b13~pre1-0ubuntu3) jaunty; urgency=low + + * Fix versioned conflict on icedtea-gcjwebplugin. LP: #284299. + * Update IcedTea build infrastructure (20081121). + - Fixes for the IcedTeaPlugin. + * Configure with pulseaudio in jaunty. + + -- Matthias Klose Fri, 21 Nov 2008 07:46:10 +0100 + +openjdk-6 (6b13~pre1-0ubuntu2) jaunty; urgency=low + + * Update IcedTea build infrastructure (20081117). + * Use openjdk-6 as stage1 compiler on armel for a faster build. + + -- Matthias Klose Mon, 17 Nov 2008 18:43:17 +0100 + +openjdk-6 (6b13~pre1-0ubuntu1) jaunty; urgency=low + + * New code drop (b13). + - In the langtools area, besides a few miscellaneous bug fixes (6760834, + 6725036, 6657499), all the langtools regression tests now pass out of + the box (6728697, 6707027) and if using the most recent version of + jtreg, the langtools regression tests can be run in the much faster + "same vm" mode of jtreg, enabled with the -s option (6749967, 6748541, + 6748546, 6748601, 6759775, 6759795, 6759796, 6759996, 6760805, 6760930). + - Gervill update, including applying a patch from IcedTea (6758986, + 6748247, 6748251). + - Publishing a few dozen additional existing regression tests as open + source (6601457, 6759433, 6740185). + - JMX and monitoring fixes (6651382, 6616825, 6756202, 6754672). + - Man page updates (6757036, 6392810, 6504867, 6326773). + - Assorted other fixes (6746055, 6621697, 6756569, 6356642, 6761678). + * Update IcedTea build infrastructure (20081111). + - Fix freeze in midi app, LP: #275672. + - Fixes in the IcedTeaPlugin: LP: #282570, LP: #282570, LP: #285729, + LP: #291377, LP: #37330, LP: #239533. + - Fix vertical text metrics with freetype scaler. LP: #289784. + * Build-depend on ecj-gcj instead of ecj on architectures using + gij/gcj as the bootstrap system. + * Fixed in 6b12: Stack overflow running Kea. LP: #244731. + + -- Matthias Klose Tue, 11 Nov 2008 12:39:16 +0100 + +openjdk-6 (6b12-1~exp1) experimental; urgency=low + + * Update IcedTea build infrastructure (20081025). + + -- Matthias Klose Sat, 25 Oct 2008 23:35:14 +0200 + +openjdk-6 (6b12-0ubuntu6) intrepid; urgency=low + + * Make the dependency on ca-certificates-java unversioned. + * Merge from IcedTea: + - plugin/icedtea/netscape/javascript/JSObject.java: Make + long constructor public. + + -- Matthias Klose Fri, 24 Oct 2008 23:06:32 +0200 + +openjdk-6 (6b12-0ubuntu5) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081024). + - Add --pkgversion= configure option. + - IcedTeaPlugin fixes. + - Fix xjc regressions. + * openjdk-jre-headless: Depend on ca-certificates-java. + * Configure with --pkgversion= to encode the package + version in the -version output and in vm dumps. + * cacao: Handle VM options Xverify:all and Xverify:none. + + -- Matthias Klose Fri, 24 Oct 2008 13:39:29 +0200 + +openjdk-6 (6b12-0) experimental; urgency=low + + * Upload to experimental. + * Pretend the availability of at least 384MB RAM; better swap on the + buildds than failing the build. + + -- Matthias Klose Sun, 19 Oct 2008 11:15:28 +0200 + +openjdk-6 (6b12-0ubuntu4) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081019). + - plugin fix (Make applet size factors doubles instead of ints). + * Don't fail the build when the jtreg summary is missing. + * openjdk-6-source-files: Fix priority and section of the binary package. + * Fix section of the plugin package. + + -- Matthias Klose Sun, 19 Oct 2008 09:29:03 +0200 + +openjdk-6 (6b12-0ubuntu3) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081018). + - Fix LiveConnect issues in the web plugin. LP: #282762. + - Fail the build, if patches don't apply. + * Show xvfb and xauth failures in the build log, when running the testsuites. + * Kill processes which still hang after running the testsuite. Closes: #493339. + * Run the testsuite in parallel, reducing build time. + * openjdk-headless: Depend instead of recommending tzdata-java. + + -- Matthias Klose Sat, 18 Oct 2008 17:15:14 +0200 + +openjdk-6 (6b12-0ubuntu2) intrepid; urgency=low + + * icedtea6-plugin: Versioned conflict with icedtea-gcjwebplugin. LP: #184299. + * Don't configure --with-alt-jar=/usr/bin/fastjar on hotspot archs + and cacao builds. Working around a problem generating rt.jar. Manually + add the netscape/javascript files in zero builds. + * Update IcedTea build infrastructure (20081017). + - configury updates. + - IcedTeaPlugin update. + * openjdk-6-jdk: Suggest visualvm. + * Remove cacao patches found in cacao 0.99.4~20081012. + + -- Matthias Klose Fri, 17 Oct 2008 13:25:45 +0200 + +openjdk-6 (6b12-0ubuntu1) intrepid; urgency=low + + * Update IcedTea to the 1.3.0 release. + * Apply upstream patch to fix upstream issue 6758986. + + -- Matthias Klose Wed, 15 Oct 2008 19:49:05 +0000 + +openjdk-6 (6b12~pre2-1) experimental; urgency=low + + * Upload to experimental. + + -- Matthias Klose Sun, 12 Oct 2008 11:16:03 +0000 + +openjdk-6 (6b12~pre2-0ubuntu3) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081015). + * Add netscape/javascript class files to rt.jar. LP: #282762. + * Be more verbose in the icedtea6-plugin package description. + * Fix some lintian warnings. + + -- Matthias Klose Wed, 15 Oct 2008 12:45:59 +0200 + +openjdk-6 (6b12~pre2-0ubuntu2) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081012). + * When building as cacao, build a cacao-oj6-plugin package. + * When building as cacao, run the testsuite on amd64, i386, sparc. + * Add finnish translations to the desktop files (Timo Jyrinki). + Closes: #494354. + * Fix font paths (Rob Gom). Closes: #495988. + * Reenable running the testsuite. + * Fix pulse-java build failure on amd64. + + -- Matthias Klose Sun, 12 Oct 2008 13:05:49 +0200 + +openjdk-6 (6b12~pre2-0ubuntu1) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081011). + * debian/copyright: Add copyright notice for pulseaudio sound files. + * Add support to build with pulseaudio support. + + -- Matthias Klose Sat, 11 Oct 2008 15:44:50 +0200 + +openjdk-6 (6b12~pre1-0ubuntu5) intrepid; urgency=low + + * Move the plugin from the -jre package into the -plugin package. + + -- Matthias Klose Fri, 10 Oct 2008 06:55:34 +0000 + +openjdk-6 (6b12~pre1-0ubuntu4) intrepid; urgency=low + + * Update IcedTea build infrastructure (20081009). + * Configure with --enable-liveconnect, build an icedtea6-plugin package. + Thanks to Deepak Bhole. + LP: #207064, #195783, #199680, #202762, #220241, #242263, #242496, + #242496, #250292, #269885, #274356, #274360, #259313. + * Build an icedtea6-plugin package. + * Merge changes from 6b11-9 packaging. + * Build a openjdk-6-source-files packages (used as a build dependency + of cacao-oj6). + * Build depend on cacao-source for cacao-oj6 builds. + + -- Matthias Klose Thu, 09 Oct 2008 15:04:27 +0200 + +openjdk-6 (6b12~pre1-0ubuntu3) intrepid; urgency=low + + * Update IcedTea build infrastructure (20080915). + * Reapply: openjdk-6-jre-headless: Make libnss-mdns a suggestion + instead of a recommendation. LP: #261847. + * Build-depend against fixed fastjar. LP: #267177. + + -- Matthias Klose Mon, 15 Sep 2008 20:16:51 +0200 + +openjdk-6 (6b12~pre1-0ubuntu2) intrepid; urgency=low + + * Update the icedtea-hotspot patch to b12, fixing build failures + on zero archs (ia64, powerpc). + + -- Matthias Klose Sat, 13 Sep 2008 11:48:44 +0200 + +openjdk-6 (6b12~pre1-0ubuntu1) intrepid; urgency=low + + * New code drop (b12). + * Update IcedTea build infrastructure (20080912). + + -- Matthias Klose Sat, 13 Sep 2008 00:41:42 +0200 + +openjdk-6 (6b11-6) unstable; urgency=low + + * Set minimum heap size independent of available memory for cacao builds. + * Link the wrapper tools with -rdynamic for cacao builds. + * Update cacao based builds: + - Update cacao to 0.99.3, remove patches applied upstream. + - Fix build failures on mipsel-linux. + * Allow setting of the bootstrap compiler per architecture. + * Configure --with-alt-jar set to fastjar to speed up builds. + * Update IcedTea build infrastructure (20080815), remove local patches + integrated in IcedTea. + - Make use of unsigned/signed types explicit. + - Fix PR icedtea/184, adding support for returning floats and doubles + for zero builds. + - Fix Fix PR icedtea/181, class type checks. + + -- Matthias Klose Fri, 15 Aug 2008 16:59:48 +0000 + +openjdk-6 (6b11-5) unstable; urgency=low + + * debian/rules (stamps/mauve-build): Configure with --host and --build. + * openjdk-6-jdk: Recommend libxt-dev (jawt_md.h header includes). + * Fix build issues on s390 (size_t is unsigned long). + + -- Matthias Klose Sun, 03 Aug 2008 20:05:44 +0200 + +openjdk-6 (6b11-4) unstable; urgency=low + + * Update IcedTea build infrastructure (20080801). + - Fix typo, causing build failure on mipsel. + + -- Matthias Klose Fri, 01 Aug 2008 01:25:51 +0200 + +openjdk-6 (6b11-3) unstable; urgency=low + + * Include the name of the VM used in the package description. + * Update IcedTea build infrastructure (20080731). + * Build for alpha, arm, mips and mipsel. + * Switch from libcupsys2(-dev) to libcups2(-dev) for newer releases. + (Closes: #492384) + * Add symlinks for header files found in JAVA_HOME/include/linux in + JAVA_HOME/include. + * openjdk-6-jre: Don' recommend lesstif2 anymore. + + -- Matthias Klose Thu, 31 Jul 2008 17:16:59 +0200 + +openjdk-6 (6b11-2ubuntu1) intrepid; urgency=low + + * xvfb seems to be broken when running with intrepid and an intrepid kernel. + Nevertheless, run xvfb-run -s "-extension GLX" on the buildds (hardy kernels). + * Stop the buildwatch process after the testsuite finishes. + + -- Matthias Klose Fri, 25 Jul 2008 12:33:44 +0200 + +openjdk-6 (6b11-2) unstable; urgency=low + + * Update IcedTea build infrastructure (20080724). + * debian/buildwatch.sh: Track long building files with no visible output. + * Fix build failure when not running the mauve testsuite. + * Disable running the testsuite for cacao builds (leaving processes around). + * Don't set a soversion for the cacao libjvm. + * Configure with --host and --build. + * Call xvfb-run with -s "-extension GLX". + + -- Matthias Klose Thu, 24 Jul 2008 22:25:30 +0200 + +openjdk-6 (6b11-1ubuntu2) intrepid; urgency=low + + * Update IcedTea build infrastructure (20080724). + * debian/buildwatch.sh: Track long building files with no visible output. + * Fix build failure when not running the mauve testsuite. + * Disable running the testsuite for cacao builds (leaving processes around). + * Don't set a soversion for the cacao libjvm. + * Configure with --host and --build. + + -- Matthias Klose Thu, 24 Jul 2008 17:58:53 +0200 + +openjdk-6 (6b11-1ubuntu1) intrepid; urgency=low + + * Regenerate the control file. + + -- Matthias Klose Wed, 23 Jul 2008 00:42:16 +0200 + +openjdk-6 (6b11-1) unstable; urgency=low + + * New code drop (b11). + * Update IcedTea build infrastructure (20080721). + * debian/generate-dfsg.sh: Update for b11. + * debian/patches/const_strings.patch, debian/patches/issue-6659207.diff: + Remove, applied upstream. + * debian/generate-debian-orig.sh: Fix /proc check. + * debian/control.in: Loosen dependency of -jre-lib on -jre. + * Support `nodocs' in DEB_BUILD_OPTIONS. + * Remove build-dependency on lesstif2-dev. + * Bootstrap using gcj on all archs; the 6b10dfsg-2 packages are broken. + * Run the jtreg harness in a virtual X environment. + * Install javazic.jar in the jre-lib package. + * Don't run the testsuite on arm; the build already takes days; only + run the testsuite on hotspot archs and powerpc. + + -- Matthias Klose Wed, 23 Jul 2008 00:28:12 +0200 + +openjdk-6 (6b10dfsg-2) unstable; urgency=low + + * Update IcedTea build infrastructure (20080714). + * On arm configure cacao builds with --enable-softfloat. + * Don't run the mauve testsuite for cacao builds (hangs the test runner + process). + * Don't configure cacao builds with --enable/-disable-zero. + * Don't remove alternatives on upgrade. + * debian/copyright: Add license for NanoXML. + * Do recommends ttf-indic-fonts instead of ttf-indic-fonts-core for + lenny and sid. Closes: #490619. + * Ignore errors when registering the jar binfmt. The alternative may + already be registered by another JVM. Closes: #490594. + * openjdk-6-jre-headless: Depend on ttf-dejavu-core instead of ttf-dejavu. + * On amd64, i386 and sparc, bootstrap using openjdk. + + -- Matthias Klose Mon, 14 Jul 2008 19:41:19 +0200 + +openjdk-6 (6b10dfsg-1ubuntu2) intrepid; urgency=low + + * Update IcedTea build infrastructure (20080702). + - Do not configure --with-shark by default. + - Update license headers from jdk7. + * Start debian/buildwatch.sh for armel and sparc builds as well. + * Allow configuration with --with-cacao. + + -- Matthias Klose Mon, 30 Jun 2008 13:30:06 +0200 + +openjdk-6 (6b10dfsg-1ubuntu1) intrepid; urgency=low + + * The rebuilt upstream tarball now has GPL-compatible free software licenses + and documented copyrights and licenses. LP: #238569. + * Fixed name of the xulrunner-1.9-javaplugin.so in the .jinfo file. + LP: #226911. + * Ignore errors during activation of class data sharing. Closes: #490617, + #490672. + + -- Matthias Klose Mon, 30 Jun 2008 13:30:06 +0200 + +openjdk-6 (6b10dfsg-1) unstable; urgency=low + + * Rebuild the upstream tar ball: + - Remove the jscheme jar files. + - Apply the patch from Iris Clark (Sun) for the copyright headers + (http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=141#c4). + - Remove jdk/src/share/classes/java/lang/instrument/package.html. + - Upload to main. + * Update IcedTea build infrastructure (20080628). + * Build an openjdk-6-dbg package. + * patches/gcc-mtune-generic.diff: Fix typo. + * openjdk-6-jre: Depend on ttf-dejavu. + * debian/copyright: Add two more copyright holders, not directly + mentioned in the third party readme. + Replace Apache 2.0 license with pointer to common-licenses. + * Fix more lintian warnings. + * debian/sun_java_app.xpm: Downsize icon to 32x32 pixels. + * Build-depend/depend on rhino. + + -- Matthias Klose Sun, 29 Jun 2008 17:42:51 +0200 + +openjdk-6 (6b10-1) unstable; urgency=low + + * New code drop (b10). + - Still some non-compliant license headers found in + openjdk/corba/src/share/classes/com/sun/tools/corba/se/idl. + - Upload to non-free. + * Update IcedTea build infrastructure (20080603). + * In fontconfig.properties, fix Korean font names and add paths to the Luxi + fonts for Motif. Add fonts for Indic languages. + * Install compilefontconfig.jar in openjdk-6-jre-lib package. + * Run the testsuites of hotspot, langtools and jdk. + * Include the jscheme-5.0 sources in the tarball, mention the jscheme + licenses in debian/copyright. + * Use the certificates provided by the ca-certificates-java package. + * More fontconfig updates (Arne Goetje). + * Fix some lintian warnings. + * Correct build-dependency for openjdk based bootstraps. + + -- Matthias Klose Wed, 04 Jun 2008 01:46:52 +0200 + +openjdk-6 (6b09-1~pre1) unstable; urgency=low + + [ Matthias Klose ] + * New code drop (b09). + * Update IcedTea build infrastructure (20080528). + - Add missing color profiles. LP: #225174. + - Moved system properties defined in hotspot to TrustManagerFactoryImpl. + LP: #224455. + * 6636469_v4.diff: Remove, committed in IcedTea. + * debian/control: Update Vcs-* attributes. + * debian/JB-jre-headless.p*.in: Fix update-binfmts calls. + * Compress the man pages, fixing the slave symlinks of the alternatives. + * javaws.desktop: Add `%u' to the Exec key, remove -viewer option. + * openjdk-6-jre-headless: Recommends libnss-mdns. + * openjdk-6-jre-headless: Warn about unmounted /proc file system. + * debian/JB-jre.mime.in: Remove the -viewer option from command (Tan Rui + Boon). + * Add a `docs' symlink pointing to /usr/share/doc/openjdk-6. LP: #218405. + * Set maintainer to the team list. + * Add copyright notices for patches and generated files. + * Add helper scripts to modify upstream tarball and generate the debian + tarball. + * Fix names for browser alternatives in jinfo file, set browser_plugin_dirs + unconditionally. + * Recommend the ttf-wqy-zenhei font instead of ttf-arphic-uming, if the + latter is available in Truetype Collection (TTC) format only, add the + fontconfig changes as a patch. + * Make the cjk font packages configurable in the control file. + * Use GCC-4.3 on all platforms where available. + * Install a config file swing.properties, allowing a user to change + the default look and feel. LP: #229112. + * When trying to determine the executable name reading /proc/self/exe, + discard known prefixes used for unionfs mounts. LP: #224110. + * Explicitely configure with --disable-zero on hotspot architectures. + * Add fix for issue 6659207, access violation in CompilerThread0. + Addresses #478560. Needs checking: LP: #229207. + * Disable building the docs on ia64, powerpc and sparc, we don't build + architecture independent packages on these architectures. + * Explicitely configure --with-parallel-jobs, needed by the updated IcedTea. + * Backport the linux-sparc patches, enable building on sparc. LP: #154080. + * Don't use an absolute path calling the compiler. + * Replace the OpenJDK version in desktop and menu files. + * Install menu files. + * Install openjdk-6-java.desktop in -jre, instead of -jre-headless. + + -- Matthias Klose Wed, 14 May 2008 08:49:54 +0200 + +openjdk-6 (6b08-1) unstable; urgency=low + + [ Torsten Werner ] + * first upload to Debian (Closes: #452750) + * Regenerate debian/control. + * Switch to bzip2 package compression in Debian but leave lzma compression + in Ubuntu. + * Temporarily downgrade Depends: tzdata-java to Recommends until the package + becomes available in Debian. + * Add myself to Uploaders. + * Do not install extras license file in openjdk-6-jre-lib. + * Add patch shebang.diff to fix a lintian warning. + * Install openjdk-6-java.desktop into the correct binary package. + * Improve some package descriptions. + * Remove some empty directories from binary packages. + * Install README.Debian in every binary package and give it some useful + content. + * Install java-rmi.cgi in package openjdk-6-jre-headless and mention it in + README.Debian. + * Install /usr/bin/jexec via update-alternatives. + * Downgrade Depends: java-common (>= 0.28). + * Add patch jexec.diff to make the jexec binary executable without + specifying an absolute path. + * Add Build-Depends: xauth and xfonts-base for mauve. + * Update and install the lintian override files. + * Replace all occurences of binary:Version and source:Version by + Source-Version to be compatible with Ubuntu release 6.06. + * Remove Conflicts: gcjwebplugin. + + [ Michael Koch ] + * Fixed Vcs-Bzr and Vcs-Browser fields. + * Removed Encoding entry from all debian/*.desktop.in files. + + [ Matthias Klose ] + * Make Java Full Screen Exclusive Mode work again with Xorg Server 1.3 + and above (Dan Munckton). LP: #154613 (Java bug 6636469). + * Configure with --enable-zero on all archs except amd64, i386, lpia. + * Update IcedTea build infrastructure. + * Handle binary files in updates of the build infrastructure. + * Enable bootstrap/normal builds per architecture. + * javaws-wrapper.sh: Use readlink --canonicalize. LP: #211515. + * binfmt-support: Handle /usr/share/binfmts/jar as a slave symlink of + the jexec alternative, install the binfmt file in the jre libdir. + Use the jexec alternative in the binfmt file. + * JB-jre-headless.postinst.in: Remove sun-java6 specific chunks. + * Differentiate between the openjdk version required as dependency and + as build dependency. + + -- Torsten Werner Wed, 09 Apr 2008 10:12:55 +0200 + +openjdk-6 (6b08-0ubuntu1) hardy; urgency=low + + * New code drop (b08). + * Update IcedTea build infrastructure. + * Move binfmt-support references from -jre to -jre-headless package. + * Don't fail on purge, if /var/lib/binfmts/openjdk-6 is missing. LP: #206721. + * Only use the basename for icons in desktop files. LP: #207413. + * Install javaws(1). LP: #191297. + * Install a wrapper script for javaws, which calls `javaws -viewer' if no + arguments are given (or else starting javaws from the desktop menu + would not do anything). + * debian/JB-web-start.applications.in: Remove the -viewer option from command. + + -- Matthias Klose Fri, 28 Mar 2008 16:10:32 +0000 + +openjdk-6 (6b07-0ubuntu1) hardy; urgency=low + + * New code drop (b07). + * Update IcedTea build infrastructure. + * debian/copyright: Update to OpenJDK Trademark Notice v1.1. + + -- Matthias Klose Sat, 22 Mar 2008 22:41:42 +0100 + +openjdk-6 (6b06-0ubuntu12) hardy; urgency=low + + * Update icon locations in menu files. + * openjdk-6-jre-headless: Provide java-virtual-machine. LP: #189953. + * openjdk-6-jre-headless: Add a conflict to gcjwebplugin; for openjdk + use the icetea-gcjwebplugin, for gij the java-gcj-compat-plugin. + + -- Matthias Klose Sat, 22 Mar 2008 20:12:41 +0100 + +openjdk-6 (6b06-0ubuntu11) hardy; urgency=low + + * Update IcedTea to 20080319. + * Move rt.jar into the openjdk-6-jre-headless package; sun/awt/X11 + class files differ between amd64 and i386. + * Install all desktop files in /usr/share/applications. + + -- Matthias Klose Wed, 19 Mar 2008 23:53:36 +0100 + +openjdk-6 (6b06-0ubuntu10) hardy; urgency=low + + * Remove print-lsb-release.patch, forwarded to IcedTea. + * Fix IcedTea configure to detect libffi without pkg-config. + + -- Matthias Klose Wed, 12 Mar 2008 20:28:55 +0100 + +openjdk-6 (6b06-0ubuntu9) hardy; urgency=low + + * Build-depend on libffi4-dev on architectures other than amd64, i386, lpia. + * Install icons in /usr/share/pixmaps, not /usr/share/icons. + * debian/rules: Call dh_icons. + + -- Matthias Klose Wed, 12 Mar 2008 11:34:44 +0100 + +openjdk-6 (6b06-0ubuntu8) hardy; urgency=low + + * Tighten dependency on java-common. + * debian/copyright: Include trademark notice. + * debian/control: Mention IcedTea in the package descriptions. + * Update IcedTea to 20080311. + + -- Matthias Klose Tue, 11 Mar 2008 21:39:27 +0100 + +openjdk-6 (6b06-0ubuntu7) hardy; urgency=low + + * Build-depend on unzip. + + -- Matthias Klose Fri, 07 Mar 2008 16:47:43 +0100 + +openjdk-6 (6b06-0ubuntu6) hardy; urgency=low + + * Build-depend on zip. + + -- Matthias Klose Fri, 07 Mar 2008 16:16:52 +0100 + +openjdk-6 (6b06-0ubuntu5) hardy; urgency=low + + * debian/mauve_tests: javax.swing.text.html.HTML.ElementTagAttributeTest, + removed, tries to access the network. + * debian/README.alternatives.in: Update for --jre-headless. + * debian/rules: Fix paths for OpenJDK based bootstrap. + * Compress packages using lzma. + * Drop build dependency on zip, unzip. + * Fix build infrastructure to bootstrap with OpenJDK instead of ecj. + * Do not build the gcjwebplugin from the OpenJDK source. + + -- Matthias Klose Fri, 07 Mar 2008 13:53:15 +0100 + +openjdk-6 (6b06-0ubuntu4) hardy; urgency=low + + * Don't register a java-rmi.cgi alternative in /usr/bin. + + -- Matthias Klose Thu, 06 Mar 2008 17:59:35 +0100 + +openjdk-6 (6b06-0ubuntu3) hardy; urgency=low + + * Split out a openjdk-6-jre-headless package, depend on java-common, + supporting update-java-alternatives --jre-headless. + * Make openjdk-6-jre-headless and openjdk-6-jre architecture any. + * New package openjdk-6-jre-lib (arch all). + * Remove openjdk-6-bin package. + * debian/patches/openjdk-ubuntu-branding.patch: New patch. + * Install images/cursors/cursors.properties as a config file. + * Do not compress demos and examples in the -demo package. + * openjdk-6-jre: Add dependency on libxinerama1. + * Update IcedTea to 20080305. + * Don't generate cacerts ourself, but depend on ca-certificates, + fix location of javax.net.ssl.trustStore property. + * Build-depend on mauve and xvfb; run some mauve tests (the list of + tests taken from the Fedora package). + * Keep a backup of the `generated' directory; some files are regenerated + differently, increasing the size of the diff. + + -- Matthias Klose Thu, 06 Mar 2008 10:05:39 +0100 + +openjdk-6 (6b06-0ubuntu2) hardy; urgency=low + + * Re-add gawk and pkg-config as build dependencies. + + -- Matthias Klose Tue, 04 Mar 2008 12:20:21 +0100 + +openjdk-6 (6b06-0ubuntu1) hardy; urgency=low + + * New code drop (b06). + * Remove java-access-bridge tarball, use an externally built package. + * Update IcedTea to 20080304. + * Don't use any compiler flags from the environment. + + -- Matthias Klose Tue, 04 Mar 2008 09:16:59 +0100 + +openjdk-6 (6b05-0ubuntu1) hardy; urgency=low + + * First public OpenJDK upstream code drop (b05). + * Depend on tzdata-java. + + -- Matthias Klose Fri, 29 Feb 2008 19:05:42 +0100 + +icedtea-java7 (7~b24-1.5+20080118-2) UNRELEASED; urgency=low + + * Fix removal of alternatives. + + -- Matthias Klose Sat, 26 Jan 2008 18:41:40 +0100 + +icedtea-java7 (7~b24-1.5+20080118-1) hardy; urgency=low + + * Fix installation of the plugin for firefox-3.0. + + -- Matthias Klose Sat, 19 Jan 2008 15:10:18 +0100 + +icedtea-java7 (7~b24-1.5+20080118-1~ppa1) hardy; urgency=low + + * Update IcedTea to 20080118. + * Fix another build failure when gcc version != gcj version. + * Use the versioned compiler to build the corba parts. + * Register plugin for firefox-3.0. + * Build using GCC-4.3. + + -- Matthias Klose Fri, 18 Jan 2008 21:15:08 +0100 + +icedtea-java7 (7~b24-1.5-2) UNRELEASED; urgency=low + + * First upload to Debian. Closes: #452750. + * debian/control.in: + - Moved package from universe/devel section to devel. + - Put icedtea-java7-doc into doc section. + - Added Homepage field and removed Homepage pseudo field from + descriptions. + - Updated Standards-Version to 3.7.3. + * debian/rules: + - Check if Makefile exists before called clean in clean target. + * debian/copyright: Converted to UTF-8. + + -- Michael Koch Sat, 05 Jan 2008 13:34:46 -0100 + +icedtea-java7 (7~b24-1.5-1) hardy; urgency=low + + * Update to IcedTea-1.5. + * debian/patches/ssp-interpreter.diff: Use bash to call the ssp script, + backslash handling differs betweend dash and bash. + + -- Matthias Klose Fri, 04 Jan 2008 09:58:27 +0100 + +icedtea-java7 (7~b24-1.5~20071214-1) hardy; urgency=low + + * New upstream snapshot (b24). + * Update java-access-bridge to 1.21.1. + * On powerpc keep the build alive using buildwatch script. + * Do not install menu entries for javaws, ControlPanel. LP: #155553, #156673. + * README.alternatives: Fix example. LP: #157063. + + -- Matthias Klose Fri, 14 Dec 2007 11:09:22 +0100 + +icedtea-java7 (7~b23-1.5~20071124-4) hardy; urgency=low + + * Allow libungif4-dev as alternative build dependency. + * On powerpc keep the build alive using buildwatch script. + * Always build the plugin using libxul-dev. + + -- Matthias Klose Mon, 10 Dec 2007 15:20:16 +0100 + +icedtea-java7 (7~b23-1.5~20071124-3) hardy; urgency=low + + * Lower optimization to -O2 for building the jdk on amd64. + * Reenable parallel build. + * Link using -Bsymbolic-functions. + * debian/patches/arguments.patch, debian/patches/const_strings.patch: + New patches (Arnaud Vandyck). + + -- Matthias Klose Thu, 29 Nov 2007 18:50:41 +0100 + +icedtea-java7 (7~b23-1.5~20071124-2) hardy; urgency=low + + * Bootstrap using ecj/gcj. + * Build using g++-4.1 on i386, lpia, powerpc. + + -- Matthias Klose Wed, 28 Nov 2007 14:46:48 +0000 + +icedtea-java7 (7~b23-1.5~20071124-1) hardy; urgency=low + + * New upstream snapshot (b23). + + -- Matthias Klose Tue, 27 Nov 2007 15:48:08 +0100 + +icedtea-java7 (7~b22-1.5~20071018-0ubuntu3) hardy; urgency=low + + * Revert the previous change, require 7~b22 versions again. + + -- Matthias Klose Sat, 20 Oct 2007 14:33:26 +0000 + +icedtea-java7 (7~b22-1.5~20071018-0ubuntu2) hardy; urgency=low + + * Loosen dependencies to 7~b21, until package is built on all archs. + + -- Matthias Klose Sat, 20 Oct 2007 07:48:36 +0000 + +icedtea-java7 (7~b22-1.5~20071018-0ubuntu1) hardy; urgency=low + + * New upstream snapshot (b22). + * Don't use parallel builds to make the build log better comparable. + + -- Matthias Klose Fri, 19 Oct 2007 19:49:51 +0200 + +icedtea-java7 (7~b21-1.4+20071007-0ubuntu5) gutsy; urgency=low + + * Update icedtea to vcs 20071012 (1.4 release), checked that the plugin + works on amd64. + * debian/copyright: Update "License Headers" section. + + -- Matthias Klose Sun, 14 Oct 2007 19:55:12 +0200 + +icedtea-java7 (7~b21-1.4+20071007-0ubuntu4) gutsy; urgency=low + + * Bootstrapping trigger upload for final step of bootstrapping i386, amd64, + lpia. + + -- LaMont Jones Wed, 10 Oct 2007 22:04:25 -0600 + +icedtea-java7 (7~b21-1.4+20071007-0ubuntu3) gutsy; urgency=low + + * Add build dependency on bzip2. + + -- Matthias Klose Wed, 10 Oct 2007 09:00:40 +0000 + +icedtea-java7 (7~b21-1.4+20071007-0ubuntu2) gutsy; urgency=low + + * Add build dependency on ant. + + -- Matthias Klose Wed, 10 Oct 2007 06:33:14 +0000 + +icedtea-java7 (7~b21-1.4+20071007-0ubuntu1) gutsy; urgency=low + + * Update icedtea to vcs 20071007. + * Update java-access-bridge to 1.20.0. + * Add build-dependency on libxinerama-dev. + * Add Xb-Npp-xxx tags for the -plugin package. + * Name the plugin "GCJ Web Browser Plugin (using IcedTea)", GCJ now + "Great Cool Java" (according to Michael Koch). + * Compress binary-indep packages using bzip2. + + -- Matthias Klose Sun, 7 Oct 2007 23:43:28 +0200 + +icedtea-java7 (7~b21-1.4+20071002-0ubuntu2) gutsy; urgency=low + + * Rebuild using icedtea 7~b21. + + -- Matthias Klose Tue, 02 Oct 2007 19:45:21 +0200 + +icedtea-java7 (7~b21-1.4+20071002-0ubuntu1) gutsy; urgency=low + + * New upstream snapshot (b21). + * Correctly unregister the executable binary format in the -bin package. + * Assemble the debian/copyright file. + + -- Matthias Klose Tue, 2 Oct 2007 09:59:37 +0200 + +icedtea-java7 (7~b19-1.3+20070905-0ubuntu1) gutsy; urgency=low + + * New upstream snapshot (b19). + * Build using g++-4.2 on amd64, using g++-4.1 on i386 and lpia. + * Build without -Werror, upstream source is not yet warning clean. + * Support DEB_BUILD_OPTIONS=parallel=. + * Add build dependency on wget. + * Add font suggestions. + * Changed font configuration to fix CJK font support (Arne Goetje). + * Fix location of the plugin, when registering the plugin alternatives. + + -- Matthias Klose Thu, 6 Sep 2007 00:46:40 +0200 + +icedtea-java7 (7~b18-1.2+20070822-0ubuntu2) gutsy; urgency=low + + * Create browser plugin directories. + * Build-depend on liblcms1-dev. + * Recommend packages with dlopened libraries: liblcms1, lesstif2, libcupsys2, + libgtk2.0-0, libgnome2-0, libgnomevfs2-0, libgconf2-4, libxrandr2, + libgl1-mesa-glx. + + -- Matthias Klose Tue, 21 Aug 2007 17:21:00 +0200 + +icedtea-java7 (7~b18-1.2+20070822-0ubuntu1) gutsy; urgency=low + + * New upstream version. + * Include java-access-bridge. + * Build -doc, -plugin packages. + * Register alternatives, priority 1060. + + -- Matthias Klose Tue, 21 Aug 2007 17:21:00 +0200 + +icedtea-java7 (7~b17-1.2+20070808-1) gutsy; urgency=low + + * Initial release, discard the initial packaging based on cdbs. + * Base the packaging on the sun-javaX packages. + + -- Matthias Klose Wed, 08 Aug 2007 15:55:39 +0200 + +icedtea (7~b16-20070724-1) UNRELEASED; urgency=low + + * Update upstream tarball to 7~b16, update icedtea to 20070724. + * debian/control: Build-depend on libfreetype6-dev. + * debian/rules: Configure --with-jar=/usr/bin/fastjar. + * Build using gcj-4.2. + + -- Matthias Klose Tue, 24 Jul 2007 11:24:55 +0200 + +icedtea (7~b14-20070704-1) unstable; urgency=low + + * Initial version. + + -- Michael Koch Wed, 04 Jul 2007 08:25:31 -0100 diff --git a/compat b/compat new file mode 100644 index 000000000..b4de39476 --- /dev/null +++ b/compat @@ -0,0 +1 @@ +11 diff --git a/control b/control new file mode 100644 index 000000000..053a1b16f --- /dev/null +++ b/control @@ -0,0 +1,169 @@ +Source: openjdk-25 +Section: java +Priority: optional +Maintainer: OpenJDK Team +Uploaders: Matthias Klose , Vladimir Petko +Build-Depends: debhelper (>= 11), + m4, lsb-release, zip, unzip, + sharutils, gawk, cpio, procps, wdiff, pkgconf, fastjar (>= 2:0.96-0ubuntu2), + time, strip-nondeterminism, debugedit (>= 4.16), + jtreg8 (>= 8+2~) , libtestng7-java , xvfb , xauth , xfonts-base , libgl1-mesa-dri [!x32] , xfwm4 , x11-xkb-utils , dbus-daemon , libasmtools-java , xvfb , + autoconf, automake, ant, ant-optional, + g++-15 , + openjdk-25-jdk-headless:native | openjdk-24-jdk-headless:native, + libxtst-dev, libxi-dev, libxt-dev, libxaw7-dev, libxrender-dev, libcups2-dev, libasound2-dev, liblcms2-dev, libxinerama-dev, libkrb5-dev, xsltproc, libpcsclite-dev, libxrandr-dev, libelf-dev, libfontconfig-dev, libfreetype-dev, libharfbuzz-dev, + libffi-dev, libffi-dev:native, + zlib1g-dev:native, zlib1g-dev, libattr1-dev, libpng-dev, libjpeg-dev, libgif-dev, systemtap-sdt-dev [!powerpc !ppc64 !ppc64el !sh4 !s390x], + libnss3-dev (>= 2:3.17.1), + openjdk-25-jdk-headless , + graphviz [alpha amd64 armhf arm64 ppc64el riscv64 sparc64 s390x], + pandoc [alpha amd64 armhf arm64 ppc64el riscv64 sparc64 s390x], +Rules-Requires-Root: no +Standards-Version: 4.7.2 +Homepage: https://openjdk.java.net/ +Vcs-Browser: https://salsa.debian.org/openjdk-team/openjdk/tree/openjdk-25 +Vcs-Git: https://salsa.debian.org/openjdk-team/openjdk.git -b openjdk-25 + +Package: openjdk-25-jdk-headless +Architecture: alpha amd64 arc armel armhf arm64 i386 loong64 mips64el powerpc ppc64 ppc64el m68k riscv64 sh4 sparc sparc64 s390x x32 +Multi-Arch: same +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-25-jre-headless (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Suggests: openjdk-25-demo, openjdk-25-source +Provides: java-sdk-headless (= ${vm:Version}), java-compiler +Description: OpenJDK Development Kit (JDK) (headless) + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + +Package: openjdk-25-jre-headless +Architecture: alpha amd64 arc armel armhf arm64 i386 loong64 mips64el powerpc ppc64 ppc64el m68k riscv64 sh4 sparc sparc64 s390x x32 +Multi-Arch: same +Pre-Depends: ${dpkg:Depends} +Depends: ${jredefault:Depends}, ${cacert:Depends}, + ${jcommon:Depends}, ${dlopenhl:Depends}, + ${mountpoint:Depends}, + ${shlibs:Depends}, ${misc:Depends} +Recommends: ${dlopenhl:Recommends}, + ${fontmanager:Recommends}, ${jsound:Recommends} +Suggests: libnss-mdns, + fonts-dejavu-extra, + fonts-ipafont-gothic, fonts-ipafont-mincho, fonts-wqy-microhei | fonts-wqy-zenhei, fonts-indic, +Provides: java-runtime-headless (= ${vm:Version}), + ${defaultvm:Provides}, ${jvm:Provides} +Description: OpenJDK Java runtime, using ${vm:Name} (headless) + Minimal Java runtime - needed for executing non GUI Java programs, + using ${vm:Name}. + +Package: openjdk-25-jdk +Architecture: alpha amd64 arc armel armhf arm64 i386 loong64 mips64el powerpc ppc64 ppc64el m68k riscv64 sh4 sparc sparc64 s390x x32 +Multi-Arch: same +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-25-jre (= ${binary:Version}), + openjdk-25-jdk-headless (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Recommends: libxt-dev +Suggests: openjdk-25-demo, openjdk-25-source, visualvm +Provides: java-sdk (= ${vm:Version}), java-compiler +Description: OpenJDK Development Kit (JDK) + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + +Package: openjdk-25-jre +Architecture: alpha amd64 arc armel armhf arm64 i386 loong64 mips64el powerpc ppc64 ppc64el m68k riscv64 sh4 sparc sparc64 s390x x32 +Multi-Arch: same +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-25-jre-headless (= ${binary:Version}), + ${dlopenjre:Depends}, ${fontmanager:Depends}, ${jsound:Depends}, + ${shlibs:Depends}, ${misc:Depends} +Recommends: ${dlopenjre:Recommends}, ${bridge:Recommends}, fonts-dejavu-extra +Provides: java-runtime (= ${vm:Version}) +Description: OpenJDK Java runtime, using ${vm:Name} + Full Java runtime environment - needed for executing Java GUI and Webstart + programs, using ${vm:Name}. + +Package: openjdk-25-demo +Architecture: alpha amd64 arc armel armhf arm64 i386 loong64 mips64el powerpc ppc64 ppc64el m68k riscv64 sh4 sparc sparc64 s390x x32 +Priority: optional +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-25-jre (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Description: Java runtime based on OpenJDK (demos and examples) + OpenJDK Java runtime + +Package: openjdk-25-source +Architecture: all +Multi-Arch: foreign +Priority: optional +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-25-jdk (>= ${source:Version}), + ${misc:Depends} +Description: OpenJDK Development Kit (JDK) source files + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains the Java programming language source files + (src.zip) for all classes that make up the Java core API. + +Package: openjdk-25-doc +Section: doc +Pre-Depends: ${dpkg:Depends} +Architecture: all +Multi-Arch: foreign +Priority: optional +Depends: ${misc:Depends}, + libjs-jquery, + libjs-jquery-ui, + libjs-jquery-ui-theme-base, +Suggests: openjdk-25-jdk +Description: OpenJDK Development Kit (JDK) documentation + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains the API documentation. + +Package: openjdk-25-dbg +Architecture: alpha amd64 arc armel armhf arm64 i386 loong64 mips64el powerpc ppc64 ppc64el m68k riscv64 sh4 sparc sparc64 s390x x32 +Multi-Arch: same +Priority: optional +Section: debug +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-25-jre-headless (= ${binary:Version}), + ${misc:Depends},${shlibs:Depends} +Recommends: openjdk-25-jre (= ${binary:Version}) +Suggests: openjdk-25-jdk (= ${binary:Version}) +Conflicts: ${dbg:Conflicts} +Description: Java runtime based on OpenJDK (debugging symbols) + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains the debugging symbols. + +Package: openjdk-25-testsupport +Architecture: alpha amd64 arc armel armhf arm64 i386 loong64 mips64el powerpc ppc64 ppc64el m68k riscv64 sh4 sparc sparc64 s390x x32 +Multi-Arch: same +Depends: openjdk-25-jdk (= ${binary:Version}), + build-essential, xfwm4, xvfb, dbus-daemon, libatk-wrapper-java, + libatk-wrapper-java-jni, jtreg8 (>= 8+2~), libtestng7-java, + ${shlibs:Depends}, + ${misc:Depends} +Description: Java runtime based on OpenJDK (regression test support) + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains all the binary files needed to run the + OpenJDK autopkg tests. + +Package: openjdk-25-jre-zero +Architecture: amd64 arm64 ppc64 ppc64el riscv64 s390x +Multi-Arch: same +Priority: optional +Pre-Depends: ${dpkg:Depends} +Depends: openjdk-25-jre-headless (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Provides: ${zerovm:Provides} +Description: Alternative JVM for OpenJDK, using Zero + The package provides an alternative runtime using the Zero VM. Built on + architectures in addition to the Hotspot VM as a debugging aid for those + architectures which don't have a Hotspot VM. + . + The VM is started with the option `-zero'. See the README.Debian for details. diff --git a/control.in b/control.in new file mode 100644 index 000000000..65ca68c7d --- /dev/null +++ b/control.in @@ -0,0 +1,155 @@ +Source: @basename@ +Section: java +Priority: optional +Maintainer: OpenJDK Team <@basename@@packages.debian.org> +Uploaders: Matthias Klose , Vladimir Petko +Build-Depends: @bd_debhelper@ + m4, lsb-release, zip, unzip, + sharutils, gawk, cpio, procps, wdiff, @bd_pkgconf@ @bd_fastjar@ + time, @bd_strip_ndt@ @bd_debugedit@ + @bd_check@ + @bd_autotools@ @bd_ant@ + @bd_gcc@ + @bd_bootstrap@ + @bd_openjdk@ + @bd_zero@ + @bd_syslibs@ @bd_systemtap@ + @bd_nss@ + @bd_cross@ + graphviz [@pandoc_archs@], + pandoc [@pandoc_archs@], +Rules-Requires-Root: no +Standards-Version: 4.7.2 +Homepage: https://openjdk.java.net/ +Vcs-Browser: https://salsa.debian.org/openjdk-team/openjdk/tree/openjdk-25 +Vcs-Git: https://salsa.debian.org/openjdk-team/openjdk.git -b openjdk-25 + +Package: @basename@-jdk-headless +Architecture: @any_archs@ +Multi-Arch: same +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre-headless (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Suggests: @basename@-demo, @basename@-source +Provides: java-sdk-headless (= ${vm:Version}), java-compiler +Description: OpenJDK Development Kit (JDK) (headless) + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + +Package: @basename@-jre-headless +Architecture: @any_archs@ +Multi-Arch: same +Pre-Depends: ${dpkg:Depends} +Depends: ${jredefault:Depends}, ${cacert:Depends}, + ${jcommon:Depends}, ${dlopenhl:Depends}, + ${mountpoint:Depends}, + ${shlibs:Depends}, ${misc:Depends} +Recommends: ${dlopenhl:Recommends}, + ${fontmanager:Recommends}, ${jsound:Recommends} +Suggests: libnss-mdns, + @core_fonts@, + @cjk_fonts@ +Provides: java-runtime-headless (= ${vm:Version}), + ${defaultvm:Provides}, ${jvm:Provides} +Description: OpenJDK Java runtime, using ${vm:Name} (headless) + Minimal Java runtime - needed for executing non GUI Java programs, + using ${vm:Name}. + +Package: @basename@-jdk +Architecture: @any_archs@ +Multi-Arch: same +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre (= ${binary:Version}), + @basename@-jdk-headless (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Recommends: libxt-dev +Suggests: @basename@-demo, @basename@-source, visualvm +Provides: java-sdk (= ${vm:Version}), java-compiler +Description: OpenJDK Development Kit (JDK) + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + +Package: @basename@-jre +Architecture: @any_archs@ +Multi-Arch: same +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre-headless (= ${binary:Version}), + ${dlopenjre:Depends}, ${fontmanager:Depends}, ${jsound:Depends}, + ${shlibs:Depends}, ${misc:Depends} +Recommends: ${dlopenjre:Recommends}, ${bridge:Recommends}, @core_fonts@ +Provides: java-runtime (= ${vm:Version}) +Description: OpenJDK Java runtime, using ${vm:Name} + Full Java runtime environment - needed for executing Java GUI and Webstart + programs, using ${vm:Name}. + +Package: @basename@-demo +Architecture: @any_archs@ +Priority: optional +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre (= ${binary:Version}), + ${shlibs:Depends}, ${misc:Depends} +Description: Java runtime based on OpenJDK (demos and examples) + OpenJDK Java runtime + +Package: @basename@-source +Architecture: all +Multi-Arch: foreign +Priority: optional +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jdk (>= ${source:Version}), + ${misc:Depends} +Description: OpenJDK Development Kit (JDK) source files + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains the Java programming language source files + (src.zip) for all classes that make up the Java core API. + +Package: @basename@-doc +Section: doc +Pre-Depends: ${dpkg:Depends} +Architecture: all +Multi-Arch: foreign +Priority: optional +Depends: ${misc:Depends}, + libjs-jquery, + libjs-jquery-ui, + libjs-jquery-ui-theme-base, +Suggests: @basename@-jdk +Description: OpenJDK Development Kit (JDK) documentation + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains the API documentation. + +Package: @basename@-dbg +Architecture: @any_archs@ +Multi-Arch: same +Priority: optional +Section: debug +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre-headless (= ${binary:Version}), + ${misc:Depends},${shlibs:Depends} +Recommends: @basename@-jre (= ${binary:Version}) +Suggests: @basename@-jdk (= ${binary:Version}) +Conflicts: ${dbg:Conflicts} +Description: Java runtime based on OpenJDK (debugging symbols) + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains the debugging symbols. + +Package: @basename@-testsupport +Architecture: @any_archs@ +Multi-Arch: same +Depends: @basename@-jdk (= ${binary:Version}), + build-essential, xfwm4, xvfb, dbus-daemon, libatk-wrapper-java, + libatk-wrapper-java-jni, @jtreg_dep@, @testng_dep@, + ${shlibs:Depends}, + ${misc:Depends} +Description: Java runtime based on OpenJDK (regression test support) + OpenJDK is a development environment for building applications, + applets, and components using the Java programming language. + . + This package contains all the binary files needed to run the + OpenJDK autopkg tests. diff --git a/control.zero-jre b/control.zero-jre new file mode 100644 index 000000000..7a1ef31fc --- /dev/null +++ b/control.zero-jre @@ -0,0 +1,14 @@ + +Package: @basename@-jre-zero +Architecture: @altzero_archs@ +Multi-Arch: same +Priority: optional +Pre-Depends: ${dpkg:Depends} +Depends: @basename@-jre-headless (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Provides: ${zerovm:Provides} +Description: Alternative JVM for OpenJDK, using Zero + The package provides an alternative runtime using the Zero VM. Built on + architectures in addition to the Hotspot VM as a debugging aid for those + architectures which don't have a Hotspot VM. + . + The VM is started with the option `-zero'. See the README.Debian for details. diff --git a/copyright b/copyright new file mode 100644 index 000000000..173e1b539 --- /dev/null +++ b/copyright @@ -0,0 +1,5097 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Files-Excluded: + .github/* + .gitattributes + src/java.base/share/native/libzip/zlib/* + src/java.desktop/share/native/libsplashscreen/giflib/* + src/java.desktop/share/native/libsplashscreen/libpng/* + src/java.smartcardio/unix/native/libj2pcsc/MUSCLE/* + src/java.desktop/share/native/libjavajpeg/jc* + src/java.desktop/share/native/libjavajpeg/jd* + src/java.desktop/share/native/libjavajpeg/je* + src/java.desktop/share/native/libjavajpeg/jf* + src/java.desktop/share/native/libjavajpeg/ji*.c + src/java.desktop/share/native/libjavajpeg/jm* + src/java.desktop/share/native/libjavajpeg/jpegi* + src/java.desktop/share/native/libjavajpeg/jpeglib.h + src/java.desktop/share/native/libjavajpeg/jq* + src/java.desktop/share/native/libjavajpeg/jv* + src/java.desktop/share/native/libjavajpeg/ju* + src/java.desktop/share/native/libjavajpeg/README +Source: https://github.com/openjdk/jdk25u +Comment: + Upstream Authors: + OpenJDK: + Oracle and/or its affiliates + Sun Microsystems, Inc + Red Hat, Inc + SAP SE + Azul Systems, Inc + Apache Software Foundation + Microsoft Corporation + Intel Corportation + IBM Corporation + Google LLC + Amazon.com, Inc + Other contributors + See the third party licenses below. + Packaged by: + Matthias Klose + +Files: * +Copyright: + Copyright (c) 1996-2025 Oracle and/or its affiliates. + Copyright (c) 1996-2003 Sun Microsystems, Inc. + Copyright (c) 2009-2012 Red Hat, Inc. + Copyright (c) 2012-2022 SAP SE. + Copyright (c) 2020-2021 Azul Systems, Inc. + Copyright (c) 1999-2022 The Apache Software Foundation. + Copyright (c) 2020-2021 Microsoft Corporation + Copyright (c) 2009-2022 Google LLC + Copyright (c) 2020-2021 Amazon.com, Inc + Copyright (c) 2021 Alibaba Group Holding Limited + Copyright (c) 2019-2021 Huawei Technologies Co. Ltd. + Copyright (c) 2021-2023 BELLSOFT + Copyright (c) 2022-23 THL A29 Limited, a Tencent company. + Copyright (c) 2021-2023, Arm Limited. + Copyright (C) 2014-2017 by Vitaly Puzrin and Andrei Tuputcyn. + Copyright (c) 2017 Instituto de Pesquisas Eldorado. + Copyright (c) 1999-2007 Brian Paul. + Copyright (c) 2018-2019 Adobe Inc. + Copyright 2006-2014 Adobe Systems Incorporated. + Copyright 1994-2011 Hewlett-Packard Co. + Portions Copyright (c) 2011-2014 IBM Corporation + Portions Copyright (c) 1995 Colin Plumb + Portions Copyright (c) 1997-2003 Eastman Kodak Company + See other third party notices under the License section +License: GPL with Classpath exception + . + --- begin of LICENSE --- + . + The GNU General Public License (GPL) + . + Version 2, June 1991 + . + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + . + Everyone is permitted to copy and distribute verbatim copies of this license + document, but changing it is not allowed. + . + Preamble + . + The licenses for most software are designed to take away your freedom to share + and change it. By contrast, the GNU General Public License is intended to + guarantee your freedom to share and change free software--to make sure the + software is free for all its users. This General Public License applies to + most of the Free Software Foundation's software and to any other program whose + authors commit to using it. (Some other Free Software Foundation software is + covered by the GNU Library General Public License instead.) You can apply it to + your programs, too. + . + When we speak of free software, we are referring to freedom, not price. Our + General Public Licenses are designed to make sure that you have the freedom to + distribute copies of free software (and charge for this service if you wish), + that you receive source code or can get it if you want it, that you can change + the software or use pieces of it in new free programs; and that you know you + can do these things. + . + To protect your rights, we need to make restrictions that forbid anyone to deny + you these rights or to ask you to surrender the rights. These restrictions + translate to certain responsibilities for you if you distribute copies of the + software, or if you modify it. + . + For example, if you distribute copies of such a program, whether gratis or for + a fee, you must give the recipients all the rights that you have. You must + make sure that they, too, receive or can get the source code. And you must + show them these terms so they know their rights. + . + We protect your rights with two steps: (1) copyright the software, and (2) + offer you this license which gives you legal permission to copy, distribute + and/or modify the software. + . + Also, for each author's protection and ours, we want to make certain that + everyone understands that there is no warranty for this free software. If the + software is modified by someone else and passed on, we want its recipients to + know that what they have is not the original, so that any problems introduced + by others will not reflect on the original authors' reputations. + . + Finally, any free program is threatened constantly by software patents. We + wish to avoid the danger that redistributors of a free program will + individually obtain patent licenses, in effect making the program proprietary. + To prevent this, we have made it clear that any patent must be licensed for + everyone's free use or not licensed at all. + . + The precise terms and conditions for copying, distribution and modification + follow. + . + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + . + 0. This License applies to any program or other work which contains a notice + placed by the copyright holder saying it may be distributed under the terms of + this General Public License. The "Program", below, refers to any such program + or work, and a "work based on the Program" means either the Program or any + derivative work under copyright law: that is to say, a work containing the + Program or a portion of it, either verbatim or with modifications and/or + translated into another language. (Hereinafter, translation is included + without limitation in the term "modification".) Each licensee is addressed as + "you". + . + Activities other than copying, distribution and modification are not covered by + this License; they are outside its scope. The act of running the Program is + not restricted, and the output from the Program is covered only if its contents + constitute a work based on the Program (independent of having been made by + running the Program). Whether that is true depends on what the Program does. + . + 1. You may copy and distribute verbatim copies of the Program's source code as + you receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy an appropriate copyright notice and + disclaimer of warranty; keep intact all the notices that refer to this License + and to the absence of any warranty; and give any other recipients of the + Program a copy of this License along with the Program. + . + You may charge a fee for the physical act of transferring a copy, and you may + at your option offer warranty protection in exchange for a fee. + . + 2. You may modify your copy or copies of the Program or any portion of it, thus + forming a work based on the Program, and copy and distribute such modifications + or work under the terms of Section 1 above, provided that you also meet all of + these conditions: + . + a) You must cause the modified files to carry prominent notices stating + that you changed the files and the date of any change. + . + b) You must cause any work that you distribute or publish, that in whole or + in part contains or is derived from the Program or any part thereof, to be + licensed as a whole at no charge to all third parties under the terms of + this License. + . + c) If the modified program normally reads commands interactively when run, + you must cause it, when started running for such interactive use in the + most ordinary way, to print or display an announcement including an + appropriate copyright notice and a notice that there is no warranty (or + else, saying that you provide a warranty) and that users may redistribute + the program under these conditions, and telling the user how to view a copy + of this License. (Exception: if the Program itself is interactive but does + not normally print such an announcement, your work based on the Program is + not required to print an announcement.) + . + These requirements apply to the modified work as a whole. If identifiable + sections of that work are not derived from the Program, and can be reasonably + considered independent and separate works in themselves, then this License, and + its terms, do not apply to those sections when you distribute them as separate + works. But when you distribute the same sections as part of a whole which is a + work based on the Program, the distribution of the whole must be on the terms + of this License, whose permissions for other licensees extend to the entire + whole, and thus to each and every part regardless of who wrote it. + . + Thus, it is not the intent of this section to claim rights or contest your + rights to work written entirely by you; rather, the intent is to exercise the + right to control the distribution of derivative or collective works based on + the Program. + . + In addition, mere aggregation of another work not based on the Program with the + Program (or with a work based on the Program) on a volume of a storage or + distribution medium does not bring the other work under the scope of this + License. + . + 3. You may copy and distribute the Program (or a work based on it, under + Section 2) in object code or executable form under the terms of Sections 1 and + 2 above provided that you also do one of the following: + . + a) Accompany it with the complete corresponding machine-readable source + code, which must be distributed under the terms of Sections 1 and 2 above + on a medium customarily used for software interchange; or, + . + b) Accompany it with a written offer, valid for at least three years, to + give any third party, for a charge no more than your cost of physically + performing source distribution, a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + . + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed only + for noncommercial distribution and only if you received the program in + object code or executable form with such an offer, in accord with + Subsection b above.) + . + The source code for a work means the preferred form of the work for making + modifications to it. For an executable work, complete source code means all + the source code for all modules it contains, plus any associated interface + definition files, plus the scripts used to control compilation and installation + of the executable. However, as a special exception, the source code + distributed need not include anything that is normally distributed (in either + source or binary form) with the major components (compiler, kernel, and so on) + of the operating system on which the executable runs, unless that component + itself accompanies the executable. + . + If distribution of executable or object code is made by offering access to copy + from a designated place, then offering equivalent access to copy the source + code from the same place counts as distribution of the source code, even though + third parties are not compelled to copy the source along with the object code. + . + 4. You may not copy, modify, sublicense, or distribute the Program except as + expressly provided under this License. Any attempt otherwise to copy, modify, + sublicense or distribute the Program is void, and will automatically terminate + your rights under this License. However, parties who have received copies, or + rights, from you under this License will not have their licenses terminated so + long as such parties remain in full compliance. + . + 5. You are not required to accept this License, since you have not signed it. + However, nothing else grants you permission to modify or distribute the Program + or its derivative works. These actions are prohibited by law if you do not + accept this License. Therefore, by modifying or distributing the Program (or + any work based on the Program), you indicate your acceptance of this License to + do so, and all its terms and conditions for copying, distributing or modifying + the Program or works based on it. + . + 6. Each time you redistribute the Program (or any work based on the Program), + the recipient automatically receives a license from the original licensor to + copy, distribute or modify the Program subject to these terms and conditions. + You may not impose any further restrictions on the recipients' exercise of the + rights granted herein. You are not responsible for enforcing compliance by + third parties to this License. + . + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), conditions + are imposed on you (whether by court order, agreement or otherwise) that + contradict the conditions of this License, they do not excuse you from the + conditions of this License. If you cannot distribute so as to satisfy + simultaneously your obligations under this License and any other pertinent + obligations, then as a consequence you may not distribute the Program at all. + For example, if a patent license would not permit royalty-free redistribution + of the Program by all those who receive copies directly or indirectly through + you, then the only way you could satisfy both it and this License would be to + refrain entirely from distribution of the Program. + . + If any portion of this section is held invalid or unenforceable under any + particular circumstance, the balance of the section is intended to apply and + the section as a whole is intended to apply in other circumstances. + . + It is not the purpose of this section to induce you to infringe any patents or + other property right claims or to contest validity of any such claims; this + section has the sole purpose of protecting the integrity of the free software + distribution system, which is implemented by public license practices. Many + people have made generous contributions to the wide range of software + distributed through that system in reliance on consistent application of that + system; it is up to the author/donor to decide if he or she is willing to + distribute software through any other system and a licensee cannot impose that + choice. + . + This section is intended to make thoroughly clear what is believed to be a + consequence of the rest of this License. + . + 8. If the distribution and/or use of the Program is restricted in certain + countries either by patents or by copyrighted interfaces, the original + copyright holder who places the Program under this License may add an explicit + geographical distribution limitation excluding those countries, so that + distribution is permitted only in or among countries not thus excluded. In + such case, this License incorporates the limitation as if written in the body + of this License. + . + 9. The Free Software Foundation may publish revised and/or new versions of the + General Public License from time to time. Such new versions will be similar in + spirit to the present version, but may differ in detail to address new problems + or concerns. + . + Each version is given a distinguishing version number. If the Program + specifies a version number of this License which applies to it and "any later + version", you have the option of following the terms and conditions either of + that version or of any later version published by the Free Software Foundation. + If the Program does not specify a version number of this License, you may + choose any version ever published by the Free Software Foundation. + . + 10. If you wish to incorporate parts of the Program into other free programs + whose distribution conditions are different, write to the author to ask for + permission. For software which is copyrighted by the Free Software Foundation, + write to the Free Software Foundation; we sometimes make exceptions for this. + Our decision will be guided by the two goals of preserving the free status of + all derivatives of our free software and of promoting the sharing and reuse of + software generally. + . + NO WARRANTY + . + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR + THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE + STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE + PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND + PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, + YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + . + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL + ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE + PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY + GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR + INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA + BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A + FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER + OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + . + END OF TERMS AND CONDITIONS + . + How to Apply These Terms to Your New Programs + . + If you develop a new program, and you want it to be of the greatest possible + use to the public, the best way to achieve this is to make it free software + which everyone can redistribute and change under these terms. + . + To do so, attach the following notices to the program. It is safest to attach + them to the start of each source file to most effectively convey the exclusion + of warranty; and each file should have at least the "copyright" line and a + pointer to where the full notice is found. + . + One line to give the program's name and a brief idea of what it does. + . + Copyright (C) + . + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + . + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + . + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + . + Also add information on how to contact you by electronic and paper mail. + . + If the program is interactive, make it output a short notice like this when it + starts in an interactive mode: + . + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes + with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free + software, and you are welcome to redistribute it under certain conditions; + type 'show c' for details. + . + The hypothetical commands 'show w' and 'show c' should show the appropriate + parts of the General Public License. Of course, the commands you use may be + called something other than 'show w' and 'show c'; they could even be + mouse-clicks or menu items--whatever suits your program. + . + You should also get your employer (if you work as a programmer) or your school, + if any, to sign a "copyright disclaimer" for the program, if necessary. Here + is a sample; alter the names: + . + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + 'Gnomovision' (which makes passes at compilers) written by James Hacker. + . + signature of Ty Coon, 1 April 1989 + . + Ty Coon, President of Vice + . + This General Public License does not permit incorporating your program into + proprietary programs. If your program is a subroutine library, you may + consider it more useful to permit linking proprietary applications with the + library. If this is what you want to do, use the GNU Library General Public + License instead of this License. + . + . + "CLASSPATH" EXCEPTION TO THE GPL + . + Certain source files distributed by Oracle America and/or its affiliates are + subject to the following clarification and special exception to the GPL, but + only where Oracle has expressly included in the particular source file's header + the words "Oracle designates this particular file as subject to the "Classpath" + exception as provided by Oracle in the LICENSE file that accompanied this code." + . + Linking this library statically or dynamically with other modules is making + a combined work based on this library. Thus, the terms and conditions of + the GNU General Public License cover the whole combination. + . + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules, + and to copy and distribute the resulting executable under terms of your + choice, provided that you also meet, for each linked independent module, + the terms and conditions of the license of that module. An independent + module is a module which is not derived from or based on this library. If + you modify this library, you may extend this exception to your version of + the library, but you are not obligated to do so. If you do not wish to do + so, delete this exception statement from your version. + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + The following licenses for third party code are taken from 'legal' + directories of modules under src/ + ------------------------------------------------------------------------------ + . + %% This notice is provided with respect to Cryptix AES v3.2.0, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Cryptix General License + . + . + Cryptix General License + . + Copyright (c) 1995-2005 The Cryptix Foundation Limited. + All rights reserved. + . + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + . + 1. Redistributions of source code must retain the copyright notice, + this list of conditions and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + . + THIS SOFTWARE IS PROVIDED BY THE CRYPTIX FOUNDATION LIMITED AND + CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE CRYPTIX FOUNDATION LIMITED OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to c-libutl 20160225, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + c-libutl License + . + . + This software is distributed under the terms of the BSD license. + . + == BSD LICENSE =============================================================== + . + (C) 2009 by Remo Dentato (rdentato@gmail.com) + . + . + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + . + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + . + http://opensource.org/licenses/bsd-license.php + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Unicode Common Local Data Repository (CLDR) v47, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + CLDR License + . + . + . + . + UNICODE LICENSE V3 + . + COPYRIGHT AND PERMISSION NOTICE + . + Copyright © 1991-2025 Unicode, Inc. + . + NOTICE TO USER: Carefully read the following legal agreement. BY + DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR + SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE + TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT + DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + . + Permission is hereby granted, free of charge, to any person obtaining a + copy of data files and any associated documentation (the "Data Files") or + software and any associated documentation (the "Software") to deal in the + Data Files or Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, and/or sell + copies of the Data Files or Software, and to permit persons to whom the + Data Files or Software are furnished to do so, provided that either (a) + this copyright and permission notice appear with all copies of the Data + Files or Software, or (b) this copyright and permission notice appear in + associated Documentation. + . + THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + THIRD PARTY RIGHTS. + . + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE + BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, + OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA + FILES OR SOFTWARE. + . + Except as contained in this notice, the name of a copyright holder shall + not be used in advertising or otherwise to promote the sale, use or other + dealings in these Data Files or Software without prior written + authorization of the copyright holder. + . + SPDX-License-Identifier: Unicode-3.0 + . + ———————————— + . + Unicode® Copyright and Terms of Use + For the general privacy policy governing access to this site, see the Unicode Privacy Policy. + . + Unicode Copyright + Copyright © 1991-2025 Unicode, Inc. All rights reserved. + Definitions + Unicode Data Files ("DATA FILES") include all data files under the directories: + https://www.unicode.org/Public/ + https://www.unicode.org/reports/ + https://www.unicode.org/ivd/data/ + . + Unicode Data Files do not include PDF online code charts under the directory: + https://www.unicode.org/Public/ + . + Unicode Software ("SOFTWARE") includes any source code published in the Unicode Standard + or any source code or compiled code under the directories: + https://www.unicode.org/Public/PROGRAMS/ + https://www.unicode.org/Public/cldr/ + http://site.icu-project.org/download/ + Terms of Use + Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein. + Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files, subject to the Terms and Conditions herein. + Further specifications of rights and restrictions pertaining to the use of the Unicode DATA FILES and SOFTWARE can be found in the Unicode Data Files and Software License. + Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. + The Unicode PDF online code charts carry specific restrictions. Those restrictions are incorporated as the first page of each PDF code chart. + All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use. + No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site. + Modification is not permitted with respect to this document. All copies of this document must be verbatim. + Restricted Rights Legend + Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement. + Warranties and Disclaimers + This publication and/or website may include technical or typographical errors or other inaccuracies. Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode, Inc. may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time. + If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase. + EXCEPT AS PROVIDED IN SECTION E.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE. + Waiver of Damages + In no event shall Unicode, Inc. or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode, Inc. was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives. + Trademarks & Logos + The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names. + The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc. + All third party trademarks referenced herein are the property of their respective owners. + Miscellaneous + Jurisdiction and Venue. This website is operated from a location in the State of California, United States of America. Unicode, Inc. makes no representation that the materials are appropriate for use in other locations. If you access this website from other locations, you are responsible for compliance with local laws. This Agreement, all use of this website and any claims and damages resulting from use of this website are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this website shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum. + Modification by Unicode, Inc. Unicode, Inc. shall have the right to modify this Agreement at any time by posting it to this website. The user may not assign any part of this Agreement without Unicode, Inc.’s prior written consent. + Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income. + Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect. + Entire Agreement. This Agreement constitutes the entire agreement between the parties. + . + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to GCC - libgcc and libstdc++ 14.2.0, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + GNU GENERAL PUBLIC LICENSE v3: Refer to the copy under /usr/share/common-licenses + . + GCC RUNTIME LIBRARY EXCEPTION v3.1 + . + . + Version 3.1, 31 March 2009 + Copyright (C) 2009 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + This GCC Runtime Library Exception ("Exception") is an additional + permission under section 7 of the GNU General Public License, version + 3 ("GPLv3"). It applies to a given file (the "Runtime Library") that + bears a notice placed by the copyright holder of the file stating that + the file is governed by GPLv3 along with this Exception. + When you use GCC to compile a program, GCC may combine portions of + certain GCC header files and runtime libraries with the compiled + program. The purpose of this Exception is to allow compilation of + non-GPL (including proprietary) programs to use, in this way, the + header files and runtime libraries covered by this Exception. + 0. Definitions. + A file is an "Independent Module" if it either requires the Runtime + Library for execution after a Compilation Process, or makes use of an + interface provided by the Runtime Library, but is not otherwise based + on the Runtime Library. + "GCC" means a version of the GNU Compiler Collection, with or without + modifications, governed by version 3 (or a specified later version) of + the GNU General Public License (GPL) with the option of using any + subsequent versions published by the FSF. + "GPL-compatible Software" is software whose conditions of propagation, + modification and use would permit combination with GCC in accord with + the license of GCC. + "Target Code" refers to output from any compiler for a real or virtual + target processor architecture, in executable form or suitable for + input to an assembler, loader, linker and/or execution + phase. Notwithstanding that, Target Code does not include data in any + format that is used as a compiler intermediate representation, or used + for producing a compiler intermediate representation. + The "Compilation Process" transforms code entirely represented in + non-intermediate languages designed for human-written code, and/or in + Java Virtual Machine byte code, into Target Code. Thus, for example, + use of source code generators and preprocessors need not be considered + part of the Compilation Process, since the Compilation Process can be + understood as starting with the output of the generators or + preprocessors. + A Compilation Process is "Eligible" if it is done using GCC, alone or + with other GPL-compatible software, or if it is done without using any + work based on GCC. For example, using non-GPL-compatible Software to + optimize any GCC intermediate representations would not qualify as an + Eligible Compilation Process. + 1. Grant of Additional Permission. + You have permission to propagate a work of Target Code formed by + combining the Runtime Library with Independent Modules, even if such + propagation would otherwise violate the terms of GPLv3, provided that + all Target Code was generated by Eligible Compilation Processes. You + may then convey such a combination under terms of your choice, + consistent with the licensing of the Independent Modules. + 2. No Weakening of GCC Copyleft. + The availability of this Exception does not imply any general + presumption that third-party software is unaffected by the copyleft + requirements of the license of GCC. + . + . + GNU GENERAL PUBLIC LICENSE v2: Refer to the copy under /usr/share/common-licenses + . + GNU LESSER GENERAL PUBLIC LICENSE v3 + . + . + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + This version of the GNU Lesser General Public License incorporates + the terms and conditions of version 3 of the GNU General Public + License, supplemented by the additional permissions listed below. + 0. Additional Definitions. + As used herein, "this License" refers to version 3 of the GNU Lesser + General Public License, and the "GNU GPL" refers to version 3 of the GNU + General Public License. + "The Library" refers to a covered work governed by this License, + other than an Application or a Combined Work as defined below. + An "Application" is any work that makes use of an interface provided + by the Library, but which is not otherwise based on the Library. + Defining a subclass of a class defined by the Library is deemed a mode + of using an interface provided by the Library. + A "Combined Work" is a work produced by combining or linking an + Application with the Library. The particular version of the Library + with which the Combined Work was made is also called the "Linked + Version". + The "Minimal Corresponding Source" for a Combined Work means the + Corresponding Source for the Combined Work, excluding any source code + for portions of the Combined Work that, considered in isolation, are + based on the Application, and not on the Linked Version. + The "Corresponding Application Code" for a Combined Work means the + object code and/or source code for the Application, including any data + and utility programs needed for reproducing the Combined Work from the + Application, but excluding the System Libraries of the Combined Work. + 1. Exception to Section 3 of the GNU GPL. + You may convey a covered work under sections 3 and 4 of this License + without being bound by section 3 of the GNU GPL. + 2. Conveying Modified Versions. + If you modify a copy of the Library, and, in your modifications, a + facility refers to a function or data to be supplied by an Application + that uses the facility (other than as an argument passed when the + facility is invoked), then you may convey a copy of the modified + version: + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + 3. Object Code Incorporating Material from Library Header Files. + The object code form of an Application may incorporate material from + a header file that is part of the Library. You may convey such object + code under terms of your choice, provided that, if the incorporated + material is not limited to numerical parameters, data structure + layouts and accessors, or small macros, inline functions and templates + (ten or fewer lines in length), you do both of the following: + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + b) Accompany the object code with a copy of the GNU GPL and this license + document. + 4. Combined Works. + You may convey a Combined Work under terms of your choice that, + taken together, effectively do not restrict modification of the + portions of the Library contained in the Combined Work and reverse + engineering for debugging such modifications, if you also do each of + the following: + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + d) Do one of the following: + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + 5. Combined Libraries. + You may place library facilities that are a work based on the + Library side by side in a single library together with other library + facilities that are not Applications and are not covered by this + License, and convey such a combined library under terms of your + choice, if you do both of the following: + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + 6. Revised Versions of the GNU Lesser General Public License. + The Free Software Foundation may publish revised and/or new versions + of the GNU Lesser General Public License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. + Each version is given a distinguishing version number. If the + Library as you received it specifies that a certain numbered version + of the GNU Lesser General Public License "or any later version" + applies to it, you have the option of following the terms and + conditions either of that published version or of any later version + published by the Free Software Foundation. If the Library as you + received it does not specify a version number of the GNU Lesser + General Public License, you may choose any version of the GNU Lesser + General Public License ever published by the Free Software Foundation. + If the Library as you received it specifies that a proxy can decide + whether future versions of the GNU Lesser General Public License shall + apply, that proxy's public statement of acceptance of any version is + permanent authorization for you to choose that version for the + Library. + . + . + GNU LESSER GENERAL PUBLIC LICENSE v2.1 + . + . + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + [This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + Preamble + The licenses for most software are designed to take away your + freedom to share and change it. By contrast, the GNU General Public + Licenses are intended to guarantee your freedom to share and change + free software--to make sure the software is free for all its users. + This license, the Lesser General Public License, applies to some + specially designated software packages--typically libraries--of the + Free Software Foundation and other authors who decide to use it. You + can use it too, but we suggest you first think carefully about whether + this license or the ordinary General Public License is the better + strategy to use in any particular case, based on the explanations + below. + When we speak of free software, we are referring to freedom of use, + not price. Our General Public Licenses are designed to make sure that + you have the freedom to distribute copies of free software (and charge + for this service if you wish); that you receive source code or can get + it if you want it; that you can change the software and use pieces of + it in new free programs; and that you are informed that you can do + these things. + To protect your rights, we need to make restrictions that forbid + distributors to deny you these rights or to ask you to surrender these + rights. These restrictions translate to certain responsibilities for + you if you distribute copies of the library or if you modify it. + For example, if you distribute copies of the library, whether gratis + or for a fee, you must give the recipients all the rights that we gave + you. You must make sure that they, too, receive or can get the source + code. If you link other code with the library, you must provide + complete object files to the recipients, so that they can relink them + with the library after making changes to the library and recompiling + it. And you must show them these terms so they know their rights. + We protect your rights with a two-step method: (1) we copyright the + library, and (2) we offer you this license, which gives you legal + permission to copy, distribute and/or modify the library. + To protect each distributor, we want to make it very clear that + there is no warranty for the free library. Also, if the library is + modified by someone else and passed on, the recipients should know + that what they have is not the original version, so that the original + author's reputation will not be affected by problems that might be + introduced by others. + Finally, software patents pose a constant threat to the existence of + any free program. We wish to make sure that a company cannot + effectively restrict the users of a free program by obtaining a + restrictive license from a patent holder. Therefore, we insist that + any patent license obtained for a version of the library must be + consistent with the full freedom of use specified in this license. + Most GNU software, including some libraries, is covered by the + ordinary GNU General Public License. This license, the GNU Lesser + General Public License, applies to certain designated libraries, and + is quite different from the ordinary General Public License. We use + this license for certain libraries in order to permit linking those + libraries into non-free programs. + When a program is linked with a library, whether statically or using + a shared library, the combination of the two is legally speaking a + combined work, a derivative of the original library. The ordinary + General Public License therefore permits such linking only if the + entire combination fits its criteria of freedom. The Lesser General + Public License permits more lax criteria for linking other code with + the library. + We call this license the "Lesser" General Public License because it + does Less to protect the user's freedom than the ordinary General + Public License. It also provides other free software developers Less + of an advantage over competing non-free programs. These disadvantages + are the reason we use the ordinary General Public License for many + libraries. However, the Lesser license provides advantages in certain + special circumstances. + For example, on rare occasions, there may be a special need to + encourage the widest possible use of a certain library, so that it + becomes a de-facto standard. To achieve this, non-free programs must + be allowed to use the library. A more frequent case is that a free + library does the same job as widely used non-free libraries. In this + case, there is little to gain by limiting the free library to free + software only, so we use the Lesser General Public License. + In other cases, permission to use a particular library in non-free + programs enables a greater number of people to use a large body of + free software. For example, permission to use the GNU C Library in + non-free programs enables many more people to use the whole GNU + operating system, as well as its variant, the GNU/Linux operating + system. + Although the Lesser General Public License is Less protective of the + users' freedom, it does ensure that the user of a program that is + linked with the Library has the freedom and the wherewithal to run + that program using a modified version of the Library. + The precise terms and conditions for copying, distribution and + modification follow. Pay close attention to the difference between a + "work based on the library" and a "work that uses the library". The + former contains code derived from the library, whereas the latter must + be combined with the library in order to run. + . + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + 0. This License Agreement applies to any software library or other + program which contains a notice placed by the copyright holder or + other authorized party saying it may be distributed under the terms of + this Lesser General Public License (also called "this License"). + Each licensee is addressed as "you". + A "library" means a collection of software functions and/or data + prepared so as to be conveniently linked with application programs + (which use some of those functions and data) to form executables. + The "Library", below, refers to any such software library or work + which has been distributed under these terms. A "work based on the + Library" means either the Library or any derivative work under + copyright law: that is to say, a work containing the Library or a + portion of it, either verbatim or with modifications and/or translated + straightforwardly into another language. (Hereinafter, translation is + included without limitation in the term "modification".) + "Source code" for a work means the preferred form of the work for + making modifications to it. For a library, complete source code means + all the source code for all modules it contains, plus any associated + interface definition files, plus the scripts used to control + compilation and installation of the library. + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of + running a program using the Library is not restricted, and output from + such a program is covered only if its contents constitute a work based + on the Library (independent of the use of the Library in a tool for + writing it). Whether that is true depends on what the Library does + and what the program that uses the Library does. + 1. You may copy and distribute verbatim copies of the Library's + complete source code as you receive it, in any medium, provided that + you conspicuously and appropriately publish on each copy an + appropriate copyright notice and disclaimer of warranty; keep intact + all the notices that refer to this License and to the absence of any + warranty; and distribute a copy of this License along with the + Library. + You may charge a fee for the physical act of transferring a copy, + and you may at your option offer warranty protection in exchange for a + fee. + 2. You may modify your copy or copies of the Library or any portion + of it, thus forming a work based on the Library, and copy and + distribute such modifications or work under the terms of Section 1 + above, provided that you also meet all of these conditions: + a) The modified work must itself be a software library. + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Library, + and can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based + on the Library, the distribution of the whole must be on the terms of + this License, whose permissions for other licensees extend to the + entire whole, and thus to each and every part regardless of who wrote + it. + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Library. + In addition, mere aggregation of another work not based on the Library + with the Library (or with a work based on the Library) on a volume of + a storage or distribution medium does not bring the other work under + the scope of this License. + 3. You may opt to apply the terms of the ordinary GNU General Public + License instead of this License to a given copy of the Library. To do + this, you must alter all the notices that refer to this License, so + that they refer to the ordinary GNU General Public License, version 2, + instead of to this License. (If a newer version than version 2 of the + ordinary GNU General Public License has appeared, then you can specify + that version instead if you wish.) Do not make any other change in + these notices. + Once this change is made in a given copy, it is irreversible for + that copy, so the ordinary GNU General Public License applies to all + subsequent copies and derivative works made from that copy. + This option is useful when you wish to copy part of the code of + the Library into a program that is not a library. + 4. You may copy and distribute the Library (or a portion or + derivative of it, under Section 2) in object code or executable form + under the terms of Sections 1 and 2 above provided that you accompany + it with the complete corresponding machine-readable source code, which + must be distributed under the terms of Sections 1 and 2 above on a + medium customarily used for software interchange. + If distribution of object code is made by offering access to copy + from a designated place, then offering equivalent access to copy the + source code from the same place satisfies the requirement to + distribute the source code, even though third parties are not + compelled to copy the source along with the object code. + 5. A program that contains no derivative of any portion of the + Library, but is designed to work with the Library by being compiled or + linked with it, is called a "work that uses the Library". Such a + work, in isolation, is not a derivative work of the Library, and + therefore falls outside the scope of this License. + However, linking a "work that uses the Library" with the Library + creates an executable that is a derivative of the Library (because it + contains portions of the Library), rather than a "work that uses the + library". The executable is therefore covered by this License. + Section 6 states terms for distribution of such executables. + When a "work that uses the Library" uses material from a header file + that is part of the Library, the object code for the work may be a + derivative work of the Library even though the source code is not. + Whether this is true is especially significant if the work can be + linked without the Library, or if the work is itself a library. The + threshold for this to be true is not precisely defined by law. + If such an object file uses only numerical parameters, data + structure layouts and accessors, and small macros and small inline + functions (ten lines or less in length), then the use of the object + file is unrestricted, regardless of whether it is legally a derivative + work. (Executables containing this object code plus portions of the + Library will still fall under Section 6.) + Otherwise, if the work is a derivative of the Library, you may + distribute the object code for the work under the terms of Section 6. + Any executables containing that work also fall under Section 6, + whether or not they are linked directly with the Library itself. + 6. As an exception to the Sections above, you may also combine or + link a "work that uses the Library" with the Library to produce a + work containing portions of the Library, and distribute that work + under terms of your choice, provided that the terms permit + modification of the work for the customer's own use and reverse + engineering for debugging such modifications. + You must give prominent notice with each copy of the work that the + Library is used in it and that the Library and its use are covered by + this License. You must supply a copy of this License. If the work + during execution displays copyright notices, you must include the + copyright notice for the Library among them, as well as a reference + directing the user to the copy of this License. Also, you must do one + of these things: + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + c) Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + For an executable, the required form of the "work that uses the + Library" must include any data and utility programs needed for + reproducing the executable from it. However, as a special exception, + the materials to be distributed need not include anything that is + normally distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating system on + which the executable runs, unless that component itself accompanies + the executable. + It may happen that this requirement contradicts the license + restrictions of other proprietary libraries that do not normally + accompany the operating system. Such a contradiction means you cannot + use both them and the Library together in an executable that you + distribute. + 7. You may place library facilities that are a work based on the + Library side-by-side in a single library together with other library + facilities not covered by this License, and distribute such a combined + library, provided that the separate distribution of the work based on + the Library and of the other library facilities is otherwise + permitted, and provided that you do these two things: + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + 8. You may not copy, modify, sublicense, link with, or distribute + the Library except as expressly provided under this License. Any + attempt otherwise to copy, modify, sublicense, link with, or + distribute the Library is void, and will automatically terminate your + rights under this License. However, parties who have received copies, + or rights, from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + 9. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify or + distribute the Library or its derivative works. These actions are + prohibited by law if you do not accept this License. Therefore, by + modifying or distributing the Library (or any work based on the + Library), you indicate your acceptance of this License to do so, and + all its terms and conditions for copying, distributing or modifying + the Library or works based on it. + 10. Each time you redistribute the Library (or any work based on the + Library), the recipient automatically receives a license from the + original licensor to copy, distribute, link with or modify the Library + subject to these terms and conditions. You may not impose any further + restrictions on the recipients' exercise of the rights granted herein. + You are not responsible for enforcing compliance by third parties with + this License. + 11. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot + distribute so as to satisfy simultaneously your obligations under this + License and any other pertinent obligations, then as a consequence you + may not distribute the Library at all. For example, if a patent + license would not permit royalty-free redistribution of the Library by + all those who receive copies directly or indirectly through you, then + the only way you could satisfy both it and this License would be to + refrain entirely from distribution of the Library. + If any portion of this section is held invalid or unenforceable under + any particular circumstance, the balance of the section is intended to + apply, and the section as a whole is intended to apply in other + circumstances. + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system which is + implemented by public license practices. Many people have made + generous contributions to the wide range of software distributed + through that system in reliance on consistent application of that + system; it is up to the author/donor to decide if he or she is willing + to distribute software through any other system and a licensee cannot + impose that choice. + This section is intended to make thoroughly clear what is believed to + be a consequence of the rest of this License. + 12. If the distribution and/or use of the Library is restricted in + certain countries either by patents or by copyrighted interfaces, the + original copyright holder who places the Library under this License + may add an explicit geographical distribution limitation excluding those + countries, so that distribution is permitted only in or among + countries not thus excluded. In such case, this License incorporates + the limitation as if written in the body of this License. + 13. The Free Software Foundation may publish revised and/or new + versions of the Lesser General Public License from time to time. + Such new versions will be similar in spirit to the present version, + but may differ in detail to address new problems or concerns. + Each version is given a distinguishing version number. If the Library + specifies a version number of this License which applies to it and + "any later version", you have the option of following the terms and + conditions either of that version or of any later version published by + the Free Software Foundation. If the Library does not specify a + license version number, you may choose any version ever published by + the Free Software Foundation. + 14. If you wish to incorporate parts of the Library into other free + programs whose distribution conditions are incompatible with these, + write to the author to ask for permission. For software which is + copyrighted by the Free Software Foundation, write to the Free + Software Foundation; we sometimes make exceptions for this. Our + decision will be guided by the two goals of preserving the free status + of all derivatives of our free software and of promoting the sharing + and reuse of software generally. + NO WARRANTY + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. + EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR + OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY + KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE + LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME + THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY + AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU + FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE + LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING + RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A + FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF + SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES. + END OF TERMS AND CONDITIONS + . + How to Apply These Terms to Your New Libraries + If you develop a new library, and you want it to be of the greatest + possible use to the public, we recommend making it free software that + everyone can redistribute and change. You can do so by permitting + redistribution under these terms (or, alternatively, under the terms + of the ordinary General Public License). + To apply these terms, attach the following notices to the library. + It is safest to attach them to the start of each source file to most + effectively convey the exclusion of warranty; and each file should + have at least the "copyright" line and a pointer to where the full + notice is found. + + Copyright (C) + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Also add information on how to contact you by electronic and paper mail. + You should also get your employer (if you work as a programmer) or + your school, if any, to sign a "copyright disclaimer" for the library, + if necessary. Here is a sample; alter the names: + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + , 1 April 1990 + Ty Coon, President of Vice + That's all there is to it! + . + . + GNU Free Documentation License v1.3 + . + . + GNU Free Documentation License + Version 1.3, 3 November 2008 + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + 0. PREAMBLE + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or noncommercially. + Secondarily, this License preserves for the author and publisher a way + to get credit for their work, while not being considered responsible + for modifications made by others. + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. It + complements the GNU General Public License, which is a copyleft + license designed for free software. + We have designed this License in order to use it for manuals for free + software, because free software needs free documentation: a free + program should come with manuals providing the same freedoms that the + software does. But this License is not limited to software manuals; + it can be used for any textual work, regardless of subject matter or + whether it is published as a printed book. We recommend this License + principally for works whose purpose is instruction or reference. + 1. APPLICABILITY AND DEFINITIONS + This License applies to any manual or other work, in any medium, that + contains a notice placed by the copyright holder saying it can be + distributed under the terms of this License. Such a notice grants a + world-wide, royalty-free license, unlimited in duration, to use that + work under the conditions stated herein. The "Document", below, + refers to any such manual or work. Any member of the public is a + licensee, and is addressed as "you". You accept the license if you + copy, modify or distribute the work in a way requiring permission + under copyright law. + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + A "Secondary Section" is a named appendix or a front-matter section of + the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could fall + directly within that overall subject. (Thus, if the Document is in + part a textbook of mathematics, a Secondary Section may not explain + any mathematics.) The relationship could be a matter of historical + connection with the subject or with related matters, or of legal, + commercial, philosophical, ethical or political position regarding + them. + The "Invariant Sections" are certain Secondary Sections whose titles + are designated, as being those of Invariant Sections, in the notice + that says that the Document is released under this License. If a + section does not fit the above definition of Secondary then it is not + allowed to be designated as Invariant. The Document may contain zero + Invariant Sections. If the Document does not identify any Invariant + Sections then there are none. + The "Cover Texts" are certain short passages of text that are listed, + as Front-Cover Texts or Back-Cover Texts, in the notice that says that + the Document is released under this License. A Front-Cover Text may + be at most 5 words, and a Back-Cover Text may be at most 25 words. + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed of + pixels) generic paint programs or (for drawings) some widely available + drawing editor, and that is suitable for input to text formatters or + for automatic translation to a variety of formats suitable for input + to text formatters. A copy made in an otherwise Transparent file + format whose markup, or absence of markup, has been arranged to thwart + or discourage subsequent modification by readers is not Transparent. + An image format is not Transparent if used for any substantial amount + of text. A copy that is not "Transparent" is called "Opaque". + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, SGML + or XML using a publicly available DTD, and standard-conforming simple + HTML, PostScript or PDF designed for human modification. Examples of + transparent image formats include PNG, XCF and JPG. Opaque formats + include proprietary formats that can be read and edited only by + proprietary word processors, SGML or XML for which the DTD and/or + processing tools are not generally available, and the + machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the material + this License requires to appear in the title page. For works in + formats which do not have any title page as such, "Title Page" means + the text near the most prominent appearance of the work's title, + preceding the beginning of the body of the text. + The "publisher" means any person or entity that distributes copies of + the Document to the public. + A section "Entitled XYZ" means a named subunit of the Document whose + title either is precisely XYZ or contains XYZ in parentheses following + text that translates XYZ in another language. (Here XYZ stands for a + specific section name mentioned below, such as "Acknowledgements", + "Dedications", "Endorsements", or "History".) To "Preserve the Title" + of such a section when you modify the Document means that it remains a + section "Entitled XYZ" according to this definition. + The Document may include Warranty Disclaimers next to the notice which + states that this License applies to the Document. These Warranty + Disclaimers are considered to be included by reference in this + License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and has + no effect on the meaning of this License. + 2. VERBATIM COPYING + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License applies + to the Document are reproduced in all copies, and that you add no + other conditions whatsoever to those of this License. You may not use + technical measures to obstruct or control the reading or further + copying of the copies you make or distribute. However, you may accept + compensation in exchange for copies. If you distribute a large enough + number of copies you must also follow the conditions in section 3. + You may also lend copies, under the same conditions stated above, and + you may publicly display copies. + 3. COPYING IN QUANTITY + If you publish printed copies (or copies in media that commonly have + printed covers) of the Document, numbering more than 100, and the + Document's license notice requires Cover Texts, you must enclose the + copies in covers that carry, clearly and legibly, all these Cover + Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on + the back cover. Both covers must also clearly and legibly identify + you as the publisher of these copies. The front cover must present + the full title with all words of the title equally prominent and + visible. You may add other material on the covers in addition. + Copying with changes limited to the covers, as long as they preserve + the title of the Document and satisfy these conditions, can be treated + as verbatim copying in other respects. + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto adjacent + pages. + If you publish or distribute Opaque copies of the Document numbering + more than 100, you must either include a machine-readable Transparent + copy along with each Opaque copy, or state in or with each Opaque copy + a computer-network location from which the general network-using + public has access to download using public-standard network protocols + a complete Transparent copy of the Document, free of added material. + If you use the latter option, you must take reasonably prudent steps, + when you begin distribution of Opaque copies in quantity, to ensure + that this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you distribute an + Opaque copy (directly or through your agents or retailers) of that + edition to the public. + It is requested, but not required, that you contact the authors of the + Document well before redistributing any large number of copies, to + give them a chance to provide you with an updated version of the + Document. + 4. MODIFICATIONS + You may copy and distribute a Modified Version of the Document under + the conditions of sections 2 and 3 above, provided that you release + the Modified Version under precisely this License, with the Modified + Version filling the role of the Document, thus licensing distribution + and modification of the Modified Version to whoever possesses a copy + of it. In addition, you must do these things in the Modified Version: + A. Use in the Title Page (and on the covers, if any) a title distinct + from that of the Document, and from those of previous versions + (which should, if there were any, be listed in the History section + of the Document). You may use the same title as a previous version + if the original publisher of that version gives permission. + B. List on the Title Page, as authors, one or more persons or entities + responsible for authorship of the modifications in the Modified + Version, together with at least five of the principal authors of the + Document (all of its principal authors, if it has fewer than five), + unless they release you from this requirement. + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + D. Preserve all the copyright notices of the Document. + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + F. Include, immediately after the copyright notices, a license notice + giving the public permission to use the Modified Version under the + terms of this License, in the form shown in the Addendum below. + G. Preserve in that license notice the full lists of Invariant Sections + and required Cover Texts given in the Document's license notice. + H. Include an unaltered copy of this License. + I. Preserve the section Entitled "History", Preserve its Title, and add + to it an item stating at least the title, year, new authors, and + publisher of the Modified Version as given on the Title Page. If + there is no section Entitled "History" in the Document, create one + stating the title, year, authors, and publisher of the Document as + given on its Title Page, then add an item describing the Modified + Version as stated in the previous sentence. + J. Preserve the network location, if any, given in the Document for + public access to a Transparent copy of the Document, and likewise + the network locations given in the Document for previous versions + it was based on. These may be placed in the "History" section. + You may omit a network location for a work that was published at + least four years before the Document itself, or if the original + publisher of the version it refers to gives permission. + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section all + the substance and tone of each of the contributor acknowledgements + and/or dedications given therein. + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section titles. + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + N. Do not retitle any existing section to be Entitled "Endorsements" + or to conflict in title with any Invariant Section. + O. Preserve any Warranty Disclaimers. + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no material + copied from the Document, you may at your option designate some or all + of these sections as invariant. To do this, add their titles to the + list of Invariant Sections in the Modified Version's license notice. + These titles must be distinct from any other section titles. + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text has + been approved by an organization as the authoritative definition of a + standard. + You may add a passage of up to five words as a Front-Cover Text, and a + passage of up to 25 words as a Back-Cover Text, to the end of the list + of Cover Texts in the Modified Version. Only one passage of + Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document already + includes a cover text for the same cover, previously added by you or + by arrangement made by the same entity you are acting on behalf of, + you may not add another; but you may replace the old one, on explicit + permission from the previous publisher that added the old one. + The author(s) and publisher(s) of the Document do not by this License + give permission to use their names for publicity for or to assert or + imply endorsement of any Modified Version. + 5. COMBINING DOCUMENTS + You may combine the Document with other documents released under this + License, under the terms defined in section 4 above for modified + versions, provided that you include in the combination all of the + Invariant Sections of all of the original documents, unmodified, and + list them all as Invariant Sections of your combined work in its + license notice, and that you preserve all their Warranty Disclaimers. + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name but + different contents, make the title of each such section unique by + adding at the end of it, in parentheses, the name of the original + author or publisher of that section if known, or else a unique number. + Make the same adjustment to the section titles in the list of + Invariant Sections in the license notice of the combined work. + In the combination, you must combine any sections Entitled "History" + in the various original documents, forming one section Entitled + "History"; likewise combine any sections Entitled "Acknowledgements", + and any sections Entitled "Dedications". You must delete all sections + Entitled "Endorsements". + 6. COLLECTIONS OF DOCUMENTS + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the rules + of this License for verbatim copying of each of the documents in all + other respects. + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert a + copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + 7. AGGREGATION WITH INDEPENDENT WORKS + A compilation of the Document or its derivatives with other separate + and independent documents or works, in or on a volume of a storage or + distribution medium, is called an "aggregate" if the copyright + resulting from the compilation is not used to limit the legal rights + of the compilation's users beyond what the individual works permit. + When the Document is included in an aggregate, this License does not + apply to the other works in the aggregate which are not themselves + derivative works of the Document. + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half of + the entire aggregate, the Document's Cover Texts may be placed on + covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic form. + Otherwise they must appear on printed covers that bracket the whole + aggregate. + 8. TRANSLATION + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section 4. + Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also include + the original English version of this License and the original versions + of those notices and disclaimers. In case of a disagreement between + the translation and the original version of this License or a notice + or disclaimer, the original version will prevail. + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to Preserve + its Title (section 1) will typically require changing the actual + title. + 9. TERMINATION + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, and + will automatically terminate your rights under this License. + However, if you cease all violation of this License, then your license + from a particular copyright holder is reinstated (a) provisionally, + unless and until the copyright holder explicitly and finally + terminates your license, and (b) permanently, if the copyright holder + fails to notify you of the violation by some reasonable means prior to + 60 days after the cessation. + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from that + copyright holder, and you cure the violation prior to 30 days after + your receipt of the notice. + Termination of your rights under this section does not terminate the + licenses of parties who have received copies or rights from you under + this License. If your rights have been terminated and not permanently + reinstated, receipt of a copy of some or all of the same material does + not give you any rights to use it. + 10. FUTURE REVISIONS OF THIS LICENSE + The Free Software Foundation may publish new, revised versions of the + GNU Free Documentation License from time to time. Such new versions + will be similar in spirit to the present version, but may differ in + detail to address new problems or concerns. See + http://www.gnu.org/copyleft/. + Each version of the License is given a distinguishing version number. + If the Document specifies that a particular numbered version of this + License "or any later version" applies to it, you have the option of + following the terms and conditions either of that specified version or + of any later version that has been published (not as a draft) by the + Free Software Foundation. If the Document does not specify a version + number of this License, you may choose any version ever published (not + as a draft) by the Free Software Foundation. If the Document + specifies that a proxy can decide which future versions of this + License can be used, that proxy's public statement of acceptance of a + version permanently authorizes you to choose that version for the + Document. + 11. RELICENSING + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. A + "Massive Multiauthor Collaboration" (or "MMC") contained in the site + means any set of copyrightable works thus published on the MMC site. + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + "Incorporate" means to publish or republish a Document, in whole or in + part, as part of another Document. + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this License + somewhere other than this MMC, and subsequently incorporated in whole or + in part into the MMC, (1) had no cover texts or invariant sections, and + (2) were thus incorporated prior to November 1, 2008. + The operator of an MMC Site may republish an MMC contained in the site + under CC-BY-SA on the same site at any time before August 1, 2009, + provided the MMC is eligible for relicensing. + ADDENDUM: How to use this License for your documents + To use this License in a document you have written, include a copy of + the License in the document and put the following copyright and + license notices just after the title page: + Copyright (c) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled "GNU + Free Documentation License". + If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, + replace the "with...Texts." line with this: + with the Invariant Sections being LIST THEIR TITLES, with the + Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + If you have Invariant Sections without Cover Texts, or some other + combination of the three, merge those two alternatives to suit the + situation. + If your document contains nontrivial examples of program code, we + recommend releasing these examples in parallel under your choice of + free software license, such as the GNU General Public License, + to permit their use in free software. + . + . + The Regents of the University of California + . + . + /*- + * Copyright (c) 1991 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. [rescinded 22 July 1999] + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + . + . + The Go Authors + . + . + Copyright (c) 2009 The Go Authors. All rights reserved. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + . + . + Apache License v2.0: Refer to the copy under /usr/share/common-licenses + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to International Components for Unicode (ICU4J) v76.1, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + ICU4J License + . + UNICODE LICENSE V3 + . + COPYRIGHT AND PERMISSION NOTICE + . + Copyright © 2016-2024 Unicode, Inc. + . + NOTICE TO USER: Carefully read the following legal agreement. BY + DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR + SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE + TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT + DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + . + Permission is hereby granted, free of charge, to any person obtaining a + copy of data files and any associated documentation (the "Data Files") or + software and any associated documentation (the "Software") to deal in the + Data Files or Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, and/or sell + copies of the Data Files or Software, and to permit persons to whom the + Data Files or Software are furnished to do so, provided that either (a) + this copyright and permission notice appear with all copies of the Data + Files or Software, or (b) this copyright and permission notice appear in + associated Documentation. + . + THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + THIRD PARTY RIGHTS. + . + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE + BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, + OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA + FILES OR SOFTWARE. + . + Except as contained in this notice, the name of a copyright holder shall + not be used in advertising or otherwise to promote the sale, use or other + dealings in these Data Files or Software without prior written + authorization of the copyright holder. + . + SPDX-License-Identifier: Unicode-3.0 + . + ---------------------------------------------------------------------- + . + Third-Party Software Licenses + . + This section contains third-party software notices and/or additional + terms for licensed third-party software components included within ICU + libraries. + . + ---------------------------------------------------------------------- + . + ICU License - ICU 1.8.1 to ICU 57.1 + . + COPYRIGHT AND PERMISSION NOTICE + . + Copyright (c) 1995-2016 International Business Machines Corporation and others + All rights reserved. + . + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, and/or sell copies of the Software, and to permit persons + to whom the Software is furnished to do so, provided that the above + copyright notice(s) and this permission notice appear in all copies of + the Software and that both the above copyright notice(s) and this + permission notice appear in supporting documentation. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY + SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER + RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + . + Except as contained in this notice, the name of a copyright holder + shall not be used in advertising or otherwise to promote the sale, use + or other dealings in this Software without prior written authorization + of the copyright holder. + . + All trademarks and registered trademarks mentioned herein are the + property of their respective owners. + . + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Mozilla Public Suffix List, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Public Suffix Notice + . + You are receiving a copy of the Mozilla Public Suffix List in the following + file: /lib/security/public_suffix_list.dat. The terms of the + Oracle license do NOT apply to this file; it is licensed under the + Mozilla Public License 2.0, separately from the Oracle programs you receive. + If you do not wish to use the Public Suffix List, you may remove the + /lib/security/public_suffix_list.dat file. + . + The Source Code of this file is available under the + Mozilla Public License, v. 2.0 and is located at + https://raw.githubusercontent.com/publicsuffix/list/823beb1425def931c8b0b170a6bc33b424c3f9b0/public_suffix_list.dat. + If a copy of the MPL was not distributed with this file, you can obtain one + at https://mozilla.org/MPL/2.0/. + . + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the License. + . + . + MPL v2.0 + . + Mozilla Public License Version 2.0 + ================================== + . + 1. Definitions + -------------- + . + 1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + . + 1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + . + 1.3. "Contribution" + means Covered Software of a particular Contributor. + . + 1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + . + 1.5. "Incompatible With Secondary Licenses" + means + . + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + . + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + . + 1.6. "Executable Form" + means any form of the work other than Source Code Form. + . + 1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + . + 1.8. "License" + means this document. + . + 1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + . + 1.10. "Modifications" + means any of the following: + . + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + . + (b) any new file in Source Code Form that contains any Covered + Software. + . + 1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + . + 1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + . + 1.13. "Source Code Form" + means the form of the work preferred for making modifications. + . + 1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + . + 2. License Grants and Conditions + -------------------------------- + . + 2.1. Grants + . + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + . + (a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + . + (b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + . + 2.2. Effective Date + . + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + . + 2.3. Limitations on Grant Scope + . + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + . + (a) for any code that a Contributor has removed from Covered Software; + or + . + (b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + . + (c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + . + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + . + 2.4. Subsequent Licenses + . + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + . + 2.5. Representation + . + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights + to grant the rights to its Contributions conveyed by this License. + . + 2.6. Fair Use + . + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + . + 2.7. Conditions + . + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted + in Section 2.1. + . + 3. Responsibilities + ------------------- + . + 3.1. Distribution of Source Form + . + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + . + 3.2. Distribution of Executable Form + . + If You distribute Covered Software in Executable Form then: + . + (a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + . + (b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + . + 3.3. Distribution of a Larger Work + . + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + . + 3.4. Notices + . + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, + or limitations of liability) contained within the Source Code Form of + the Covered Software, except that You may alter any license notices to + the extent required to remedy known factual inaccuracies. + . + 3.5. Application of Additional Terms + . + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + . + 4. Inability to Comply Due to Statute or Regulation + --------------------------------------------------- + . + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Software due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description must + be placed in a text file included with all distributions of the Covered + Software under this License. Except to the extent prohibited by statute + or regulation, such description must be sufficiently detailed for a + recipient of ordinary skill to be able to understand it. + . + 5. Termination + -------------- + . + 5.1. The rights granted under this License will terminate automatically + if You fail to comply with any of its terms. However, if You become + compliant, then the rights granted under this License from a particular + Contributor are reinstated (a) provisionally, unless and until such + Contributor explicitly and finally terminates Your grants, and (b) on an + ongoing basis, if such Contributor fails to notify You of the + non-compliance by some reasonable means prior to 60 days after You have + come back into compliance. Moreover, Your grants from a particular + Contributor are reinstated on an ongoing basis if such Contributor + notifies You of the non-compliance by some reasonable means, this is the + first time You have received notice of non-compliance with this License + from such Contributor, and You become compliant prior to 30 days after + Your receipt of the notice. + . + 5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + . + 5.3. In the event of termination under Sections 5.1 or 5.2 above, all + end user license agreements (excluding distributors and resellers) which + have been validly granted by You or Your distributors under this License + prior to termination shall survive termination. + . + ************************************************************************ + * * + * 6. Disclaimer of Warranty * + * ------------------------- * + * * + * Covered Software is provided under this License on an "as is" * + * basis, without warranty of any kind, either expressed, implied, or * + * statutory, including, without limitation, warranties that the * + * Covered Software is free of defects, merchantable, fit for a * + * particular purpose or non-infringing. The entire risk as to the * + * quality and performance of the Covered Software is with You. * + * Should any Covered Software prove defective in any respect, You * + * (not any Contributor) assume the cost of any necessary servicing, * + * repair, or correction. This disclaimer of warranty constitutes an * + * essential part of this License. No use of any Covered Software is * + * authorized under this License except under this disclaimer. * + * * + ************************************************************************ + . + ************************************************************************ + * * + * 7. Limitation of Liability * + * -------------------------- * + * * + * Under no circumstances and under no legal theory, whether tort * + * (including negligence), contract, or otherwise, shall any * + * Contributor, or anyone who distributes Covered Software as * + * permitted above, be liable to You for any direct, indirect, * + * special, incidental, or consequential damages of any character * + * including, without limitation, damages for lost profits, loss of * + * goodwill, work stoppage, computer failure or malfunction, or any * + * and all other commercial damages or losses, even if such party * + * shall have been informed of the possibility of such damages. This * + * limitation of liability shall not apply to liability for death or * + * personal injury resulting from such party's negligence to the * + * extent applicable law prohibits such limitation. Some * + * jurisdictions do not allow the exclusion or limitation of * + * incidental or consequential damages, so this exclusion and * + * limitation may not apply to You. * + * * + ************************************************************************ + . + 8. Litigation + ------------- + . + Any litigation relating to this License may be brought only in the + courts of a jurisdiction where the defendant maintains its principal + place of business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. + Nothing in this Section shall prevent a party's ability to bring + cross-claims or counter-claims. + . + 9. Miscellaneous + ---------------- + . + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides + that the language of a contract shall be construed against the drafter + shall not be used to construe this License against a Contributor. + . + 10. Versions of the License + --------------------------- + . + 10.1. New Versions + . + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + . + 10.2. Effect of New Versions + . + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + . + 10.3. Modified Versions + . + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + . + 10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses + . + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + . + Exhibit A - Source Code Form License Notice + ------------------------------------------- + . + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at https://mozilla.org/MPL/2.0/. + . + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to look + for such a notice. + . + You may add additional accurate notices of copyright ownership. + . + Exhibit B - "Incompatible With Secondary Licenses" Notice + --------------------------------------------------------- + . + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to SipHash v1.0-68c8a7c, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Notice + SipHash reference C implementation + . + . + Copyright (c) 2016 Jean-Philippe Aumasson + . + To the extent possible under law, the author(s) have dedicated all copyright + and related and neighboring rights to this software to the public domain + worldwide. This software is distributed without any warranty. + . + You should have received a copy of the CC0 Public Domain Dedication along + with + this software. If not, see + . + . + . + Licenses + The code is dual-licensed CCO and MIT + . + #MIT License + . + Copyright 2012-2024 JP Aumasson + . + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + . + . + #CC0 1.0 Universal + . + Statement of Purpose + . + The laws of most jurisdictions throughout the world automatically confer + exclusive Copyright and Related Rights (defined below) upon the creator and + subsequent owner(s) (each and all, an "owner") of an original work of + authorship and/or a database (each, a "Work"). + . + Certain owners wish to permanently relinquish those rights to a Work for the + purpose of contributing to a commons of creative, cultural and scientific + works ("Commons") that the public can reliably and without fear of later + claims of infringement build upon, modify, incorporate in other works, reuse + and redistribute as freely as possible in any form whatsoever and for any + purposes, including without limitation commercial purposes. These owners may + contribute to the Commons to promote the ideal of a free culture and the + further production of creative, cultural and scientific works, or to gain + reputation or greater distribution for their Work in part through the use and + efforts of others. + . + For these and/or other purposes and motivations, and without any expectation + of additional consideration or compensation, the person associating CC0 with a + Work (the "Affirmer"), to the extent that he or she is an owner of Copyright + and Related Rights in the Work, voluntarily elects to apply CC0 to the Work + and publicly distribute the Work under its terms, with knowledge of his or her + Copyright and Related Rights in the Work and the meaning and intended legal + effect of CC0 on those rights. + . + 1. Copyright and Related Rights. A Work made available under CC0 may be + protected by copyright and related or neighboring rights ("Copyright and + Related Rights"). Copyright and Related Rights include, but are not limited + to, the following: + . + i. the right to reproduce, adapt, distribute, perform, display, communicate, + and translate a Work; + . + ii. moral rights retained by the original author(s) and/or performer(s); + . + iii. publicity and privacy rights pertaining to a person's image or likeness + depicted in a Work; + . + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + . + v. rights protecting the extraction, dissemination, use and reuse of data in + a Work; + . + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation thereof, + including any amended or successor version of such directive); and + . + vii. other similar, equivalent or corresponding rights throughout the world + based on applicable law or treaty, and any national implementations thereof. + . + 2. Waiver. To the greatest extent permitted by, but not in contravention of, + applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and + unconditionally waives, abandons, and surrenders all of Affirmer's Copyright + and Related Rights and associated claims and causes of action, whether now + known or unknown (including existing as well as future claims and causes of + action), in the Work (i) in all territories worldwide, (ii) for the maximum + duration provided by applicable law or treaty (including future time + extensions), (iii) in any current or future medium and for any number of + copies, and (iv) for any purpose whatsoever, including without limitation + commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes + the Waiver for the benefit of each member of the public at large and to the + detriment of Affirmer's heirs and successors, fully intending that such Waiver + shall not be subject to revocation, rescission, cancellation, termination, or + any other legal or equitable action to disrupt the quiet enjoyment of the Work + by the public as contemplated by Affirmer's express Statement of Purpose. + . + 3. Public License Fallback. Should any part of the Waiver for any reason be + judged legally invalid or ineffective under applicable law, then the Waiver + shall be preserved to the maximum extent permitted taking into account + Affirmer's express Statement of Purpose. In addition, to the extent the Waiver + is so judged Affirmer hereby grants to each affected person a royalty-free, + non transferable, non sublicensable, non exclusive, irrevocable and + unconditional license to exercise Affirmer's Copyright and Related Rights in + the Work (i) in all territories worldwide, (ii) for the maximum duration + provided by applicable law or treaty (including future time extensions), (iii) + in any current or future medium and for any number of copies, and (iv) for any + purpose whatsoever, including without limitation commercial, advertising or + promotional purposes (the "License"). The License shall be deemed effective as + of the date CC0 was applied by Affirmer to the Work. Should any part of the + License for any reason be judged legally invalid or ineffective under + applicable law, such partial invalidity or ineffectiveness shall not + invalidate the remainder of the License, and in such case Affirmer hereby + affirms that he or she will not (i) exercise any of his or her remaining + Copyright and Related Rights in the Work or (ii) assert any associated claims + and causes of action with respect to the Work, in either case contrary to + Affirmer's express Statement of Purpose. + . + 4. Limitations and Disclaimers. + . + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + . + b. Affirmer offers the Work as-is and makes no representations or warranties + of any kind concerning the Work, express, implied, statutory or otherwise, + including without limitation warranties of title, merchantability, fitness + for a particular purpose, non infringement, or the absence of latent or + other defects, accuracy, or the present or absence of errors, whether or not + discoverable, all to the greatest extent permissible under applicable law. + . + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without limitation + any person's Copyright and Related Rights in the Work. Further, Affirmer + disclaims responsibility for obtaining any necessary consents, permissions + or other rights required for any use of the Work. + . + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to this + CC0 or use of the Work. + . + For more information, please see + + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to The Unicode Standard, Unicode Character Database, Version 16.0.0, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Unicode Character Database + . + . + UNICODE LICENSE V3 + . + COPYRIGHT AND PERMISSION NOTICE + . + Copyright © 1991-2024 Unicode, Inc. + . + NOTICE TO USER: Carefully read the following legal agreement. BY + DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR + SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE + TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT + DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + . + Permission is hereby granted, free of charge, to any person obtaining a + copy of data files and any associated documentation (the "Data Files") or + software and any associated documentation (the "Software") to deal in the + Data Files or Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, and/or sell + copies of the Data Files or Software, and to permit persons to whom the + Data Files or Software are furnished to do so, provided that either (a) + this copyright and permission notice appear with all copies of the Data + Files or Software, or (b) this copyright and permission notice appear in + associated Documentation. + . + THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + THIRD PARTY RIGHTS. + . + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE + BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, + OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA + FILES OR SOFTWARE. + . + Except as contained in this notice, the name of a copyright holder shall + not be used in advertising or otherwise to promote the sale, use or other + dealings in these Data Files or Software without prior written + authorization of the copyright holder. + . + . + ------------------ + . + Unicode® Consortium Copyright, Terms of Use, and Licenses + . + Welcome to the website of Unicode, Inc. (dba The Unicode Consortium) + (“Unicode”). Except as otherwise noted herein, these terms and conditions + (“Terms of Use”) govern your use of the Unicode website and Unicode Products. + Your use of this website and/or Unicode Products constitutes your agreement + to follow and be bound by these Terms of Use. Unicode provides you with + access to and use of this website and Unicode Products subject to your + compliance with these Terms of Use. If you do not agree to these Terms + of Use, you should not access or use this website or Unicode Products. + Unicode reserves the right to make changes to the website, to Unicode + Products, and to these Terms of Use at any time in its sole d iscretion. + . + 1. Unicode Copyright: Copyright © 1991-Present Unicode, Inc. + . + 2. Definitions + . + a. “Unicode Products” includes the Unicode website and its content, + Data Files, Software, the Unicode Standard, all other Unicode + standards, specifications, technical reports, technical notes, + annexes, code charts, data files, software, publications, + webinars, videos, course materials, online and in-person events, + and all other Unicode products and services made available via + this website or any other channel of distribution, including but + not limited to Github, Maven, YouTube, and other third-party + sites where Unicode maintains and provides products, materials, + and services. + . + b. “Unicode Data Files” or "Data Files" include all computer data + files under the following directories: + . + i. https://www.unicode.org/Public/ + ii. https://www.unicode.org/reports/ + iii. https://www.unicode.org/ivd/data/ + iv. https://github.com/unicode-org/ + . + but exclude any materials present in the above directories that + are not computer data files, such as PDF code charts and + Technical Reports. + . + c. “Unicode Software” or "Software" includes any source code or + compiled code in any Unicode Product including but not limited to + the code included in the following directories: + . + i. https://www.unicode.org/Public/PROGRAMS/ + ii. https://www.unicode.org/Public/cldr/ + iii. https://github.com/unicode-org/ + . + 3. Permissions, Licenses, and Restrictions on Use + . + a. You are authorized to freely access and use this website and its + content and all Unicode Products subject to these Terms of Use and + subject to any restriction, permission, or license specifically + associated with any specific material or content. No license is + granted to copy or "mirror" this website. Linking to this website + is permitted. + . + b. Except where otherwise more broadly permitted or licensed: + . + 1. you may not make copies of or modifications to Unicode + Products for public distribution, or incorporate Unicode + Products in whole or in part into any product or publication, + or otherwise publicly distribute them, without the express + written permission of Unicode, and + . + 2. you may not copy or extract fonts or font data from any + Unicode Products, including but not limited to Unicode Code + Charts. + . + c. All Unicode Data Files and Unicode Software are subject to the + terms and conditions of the free and open-source Unicode License + v3, unless otherwise indicated by specific restriction, + permission, or license identified at the point of release or in + such software, data file, or other documentation. + . + d. You may freely download and make copies of the Unicode® Standard + Core Specification, Unicode Technical Reports, Unicode Technical + Notes, Unicode Code Charts, and other portions of this website + and may annotate and translate such permitted downloads and + copies, provided that such downloads, copies, annotations, and + translations are solely for personal or internal business + purposes and not for public distribution, and further provided + that any permitted copies and modifications fully reproduce all + copyright and other legal notices contained in the original. + Notwithstanding the foregoing, specific versions of the Unicode® + Standard Core Specification, Unicode Technical Reports, Unicode + Technical Notes, and Unicode Code Charts, as well as other Unicode + publications, materials, and portions of this website may be + subject to broader permissions and/or further reservations of + rights and restrictions on use found in the title pages, cover + sheets, front matter, and/or footnotes for each such version, + report, chart, or other publication or material. Consult each + version, report, chart, or other publication or material for any + such permissions and further reservations of rights and + restrictions on use. + . + 4. Restricted Rights Legend. Any Unicode Data Files or Software that are + licensed to the United States of America, its agencies and/or + instrumentalities under these Terms of Use is commercial technical + data or commercial computer software developed exclusively at private + expense as defined in FAR 2.101, or DFARS 252.227-7014, as applicable. + For Unicode Data Files, use, duplication, or disclosure by the + Government is subject to restrictions as set forth in DFARS + 202.227-7015 Technical Data, Commercial and Items and these Terms of + Use. For Unicode Software, in accordance with FAR 12-212 or DFARS + 227-7202, as applicable, use, duplication or disclosure by the + Government is subject to the restrictions set forth in these Terms + of Use. + . + 5. Disclaimer of Warranties & Limitation of Liability + . + a. This website and the Unicode Products are provided “AS-IS” without + charge as a convenience to visitors and users. While Unicode + attempts to provide accurate, error-free, and timely information, + there may be technical or factual inaccuracies and typographical + or other errors in this website and in the Unicode Products. + Unicode reserves the right to make corrections and changes to the + website and the Unicode Products at any time without notice. + . + b. YOU ASSUME ALL RESPONSIBILITY AND RISK WITH RESPECT TO YOUR USE + OF THIS WEBSITE AND THE UNICODE PRODUCTS, WHICH ARE PROVIDED "AS + IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR + STATUTORY, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF + ACCURACY, COMPLETENESS, TITLE, MERCHANTABILITY, FITNESS FOR A + PARTICULAR PURPOSE, OR NON-INFRINGEMENT OF THIRD PARTY RIGHTS. + UNICODE AND ITS LICENSORS AND CONTRIBUTORS ASSUME NO + RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS WEBSITE AND/OR THE + UNICODE PRODUCTS. IF YOU ARE DISSATISFIED WITH THIS WEBSITE OR THE + UNICODE PRODUCTS, YOUR SOLE REMEDY IS TO DISCONTINUE USE OF THE + WEBSITE AND THE UNICODE PRODUCTS. + . + c. IN NO EVENT SHALL UNICODE, ITS MEMBERS, OR ITS LICENSORS OR + CONTRIBUTORS BE LIABLE FOR ANY CLAIM OR DAMAGES WHATSOEVER OF ANY + KIND, WHETHER DIRECT, INDIRECT, SPECIAL, INCIDENTAL, + CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES, WHETHER OR NOT + UNICODE WAS ADVISED OF THE POSSIBILITY OF SUCH DAMAGE, INCLUDING + BUT NOT LIMITED TO DAMAGE RESULTING FROM LOSS OF USE, DATA, OR + PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE, OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE, + INABILITY TO USE, PERFORMANCE, FUNCTIONALITY, MODIFICATION, OR + DISTRIBUTION OF THIS WEBSITE, THE UNICODE PRODUCTS, OR ANY + DERIVATIVES THEREOF. + . + d. Unicode makes no warranties or representations of any kind + regarding any non-Unicode sites to which you may be directed or + hyperlinked from this website. Hyperlinks are included solely for + your convenience and Unicode makes no warranties or + representations with regard to the accuracy, availability, + suitability, or safety of information, products, or services + provided on such non-Unicode sites. + . + 6. Intellectual Property Contributions to Unicode. All contributions or + submissions to Unicode are governed by The Unicode Consortium + Intellectual Property, Licensing & Technical Contribution Policies. + If you wish to make any contribution or submission to Unicode, refer + to the foregoing Policies for further information on how to do so. + In the absence of a signed contributor license or other agreement with + Unicode that expressly governs a particular contribution or + submission, the act of making a contribution or submission of any kind + to Unicode by any communication channel constitutes a binding legal + agreement by the contributor or submitter that they: + . + a. represent and agree that the contributed matter is not + proprietary or confidential to the contributor or any third + party, and + . + b. grant to Unicode and to recipients of products distributed by + Unicode a perpetual, irrevocable, unrestricted, worldwide, + nonexclusive, no-charge, royalty-free license, without + obligation for accounting, to reproduce, prepare derivative + works of, publicly display, publicly perform, distribute, + make, use, sell, offer to sell, or import that matter for any + purpose, with the unrestricted right to sublicense those + rights. + . + 7. Compliance with Unicode Policies. These Terms of Use hereby + incorporate by reference the following Unicode Policies. Your use of + this website and/or Unicode Products and/or your participation in + Unicode activities constitutes your agreement to these Policies + which may be modified at any time in Unicode’s sole discretion: + . + a. The Unicode Consortium Code of Conduct + b. The Unicode Consortium Antitrust Policy & Guidelines + c. The Unicode Consortium Intellectual Property, Licensing & + Technical Contribution Policies + d. The Unicode Consortium Name and Trademark Usage Policy + e. The Unicode Consortium Policy on Handling of Confidential + Business Data + f. The Unicode Consortium General Privacy Policy + g. The Unicode Technical Group Procedures + . + 8. Trademarks & Logos. The Unicode Word Mark and the Unicode Logo are + trademarks of Unicode, Inc. “The Unicode Consortium'' and “Unicode, + Inc.” are trade names of Unicode, Inc. You hereby acknowledge and + agree to respect Unicode’s exclusive worldwide rights in the Unicode + Word Mark, the Unicode Logo, and the Unicode trade names. The Unicode + Consortium Name and Trademark Usage Policy is incorporated herein by + reference and you agree to abide by its provisions, which may be + changed from time to time in Unicode’s sole discretion. + . + 9. Jurisdiction and Venue. This website is operated from, and the + Unicode Products are made available from, locations in the United + States of America. Unicode makes no representation that this website + or Unicode Products are appropriate for use in other locations. If + you access this website or the Unicode Products from other locations, + you are responsible for compliance with local laws. These Terms of + Use, all use of this website and Unicode Products, and any claims and + damages resulting from use of this website or Unicode Products, are + governed by the applicable laws of the United States of America and + the State of California without regard to any principles which would + apply the laws of different jurisdictions. You agree that any disputes + regarding this website and the Unicode Products shall be resolved + solely in the appropriate state and federal courts located in the + counties of San Francisco, San Mateo, or Santa Clara, California. + You agree that these courts have personal jurisdiction over you and + agree to waive any right to transfer the dispute to any other forum. + . + 10. Severability. If any provision of these Terms of Use is declared + invalid or unenforceable, the remaining provisions of these Terms of + Use shall remain in effect. + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Eastman Kodak Company: Portions of color management and imaging software, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Eastman Kodak Notice + . + Portions Copyright Eastman Kodak Company 1991-2003 + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to The FreeType Project: Freetype v2.14.3, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + . + FreeType Notice + . + . + FreeType comes with two licenses from which you can choose the one + which fits your needs best. + . + The FreeType License (FTL) is the most commonly used one. It is + a BSD-style license with a credit clause and thus compatible with + the GNU Public License (GPL) version 3, but not with the + GPL version 2. + . + The GNU General Public License (GPL), version 2. Use it for all + projects which use the GPLv2 also, or which need a license + compatible to the GPLv2. + . + . + . + FreeType License + . + . + Copyright (C) 1996-2026 by David Turner, Robert Wilhelm, and Werner Lemberg. + Copyright (C) 2007-2026 by Dereg Clegg and Michael Toftdal. + Copyright (C) 1996-2026 by Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. + Copyright (C) 2022-2026 by David Turner, Robert Wilhelm, Werner Lemberg, George Williams, and + Copyright (C) 2004-2026 by Masatake YAMATO and Redhat K.K. + Copyright (C) 2007-2026 by Derek Clegg and Michael Toftdal. + Copyright (C) 2003-2026 by Masatake YAMATO, Red Hat K.K., + Copyright (C) 1996-2026 by David Turner, Robert Wilhelm, Werner Lemberg, and Dominik Röttsches. + Copyright (C) 2007-2026 by David Turner. + Copyright (C) 2022-2026 by David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti. + Copyright (C) 2007-2026 by Rahul Bhalerao , . + Copyright (C) 2025-2026 by Behdad Esfahbod. + Copyright (C) 2008-2026 by David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya. + Copyright (C) 2013-2026 by Google, Inc. + Copyright (C) 2019-2026 by Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg. + Copyright (C) 2009-2026 by Oran Agra and Mickey Gabel. + Copyright (C) 2018-2026 by David Turner, Robert Wilhelm, Dominik Röttsches, and Werner Lemberg. + Copyright (C) 2004-2026 by David Turner, Robert Wilhelm, Werner Lemberg, and George Williams. + The FreeType Project LICENSE + ---------------------------- + . + 2006-Jan-27 + . + Copyright 1996-2002, 2006 by + David Turner, Robert Wilhelm, and Werner Lemberg + . + . + . + Introduction + ============ + . + The FreeType Project is distributed in several archive packages; + some of them may contain, in addition to the FreeType font engine, + various tools and contributions which rely on, or relate to, the + FreeType Project. + . + This license applies to all files found in such packages, and + which do not fall under their own explicit license. The license + affects thus the FreeType font engine, the test programs, + documentation and makefiles, at the very least. + . + This license was inspired by the BSD, Artistic, and IJG + (Independent JPEG Group) licenses, which all encourage inclusion + and use of free software in commercial and freeware products + alike. As a consequence, its main points are that: + . + o We don't promise that this software works. However, we will be + interested in any kind of bug reports. (`as is' distribution) + . + o You can use this software for whatever you want, in parts or + full form, without having to pay us. (`royalty-free' usage) + . + o You may not pretend that you wrote this software. If you use + it, or only parts of it, in a program, you must acknowledge + somewhere in your documentation that you have used the + FreeType code. (`credits') + . + We specifically permit and encourage the inclusion of this + software, with or without modifications, in commercial products. + We disclaim all warranties covering The FreeType Project and + assume no liability related to The FreeType Project. + . + . + Finally, many people asked us for a preferred form for a + credit/disclaimer to use in compliance with this license. We thus + encourage you to use the following text: + . + """ + Portions of this software are copyright © The FreeType + Project (https://freetype.org). All rights reserved. + """ + . + Please replace with the value from the FreeType version you + actually use. + . + . + Legal Terms + =========== + . + 0. Definitions + -------------- + . + Throughout this license, the terms `package', `FreeType Project', + and `FreeType archive' refer to the set of files originally + distributed by the authors (David Turner, Robert Wilhelm, and + Werner Lemberg) as the `FreeType Project', be they named as alpha, + beta or final release. + . + `You' refers to the licensee, or person using the project, where + `using' is a generic term including compiling the project's source + code as well as linking it to form a `program' or `executable'. + This program is referred to as `a program using the FreeType + engine'. + . + This license applies to all files distributed in the original + FreeType Project, including all source code, binaries and + documentation, unless otherwise stated in the file in its + original, unmodified form as distributed in the original archive. + If you are unsure whether or not a particular file is covered by + this license, you must contact us to verify this. + . + The FreeType Project is copyright (C) 1996-2000 by David Turner, + Robert Wilhelm, and Werner Lemberg. All rights reserved except as + specified below. + . + 1. No Warranty + -------------- + . + THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO + USE, OF THE FREETYPE PROJECT. + . + 2. Redistribution + ----------------- + . + This license grants a worldwide, royalty-free, perpetual and + irrevocable right and license to use, execute, perform, compile, + display, copy, create derivative works of, distribute and + sublicense the FreeType Project (in both source and object code + forms) and derivative works thereof for any purpose; and to + authorize others to exercise some or all of the rights granted + herein, subject to the following conditions: + . + o Redistribution of source code must retain this license file + (`FTL.TXT') unaltered; any additions, deletions or changes to + the original files must be clearly indicated in accompanying + documentation. The copyright notices of the unaltered, + original files must be preserved in all copies of source + files. + . + o Redistribution in binary form must provide a disclaimer that + states that the software is based in part of the work of the + FreeType Team, in the distribution documentation. We also + encourage you to put an URL to the FreeType web page in your + documentation, though this isn't mandatory. + . + These conditions apply to any software derived from or based on + the FreeType Project, not just the unmodified files. If you use + our work, you must acknowledge us. However, no fee need be paid + to us. + . + 3. Advertising + -------------- + . + Neither the FreeType authors and contributors nor you shall use + the name of the other for commercial, advertising, or promotional + purposes without specific prior written permission. + . + We suggest, but do not require, that you use one or more of the + following phrases to refer to this software in your documentation + or advertising materials: `FreeType Project', `FreeType Engine', + `FreeType library', or `FreeType Distribution'. + . + As you have not signed this license, you are not required to + accept it. However, as the FreeType Project is copyrighted + material, only this license, or another one contracted with the + authors, grants you the right to use, distribute, and modify it. + Therefore, by using, distributing, or modifying the FreeType + Project, you indicate that you understand and accept all the terms + of this license. + . + 4. Contacts + ----------- + . + There are two mailing lists related to FreeType: + . + o freetype@nongnu.org + . + Discusses general use and applications of FreeType, as well as + future and wanted additions to the library and distribution. + If you are looking for support, start in this list if you + haven't found anything to help you in the documentation. + . + o freetype-devel@nongnu.org + . + Discusses bugs, as well as engine internals, design issues, + specific licenses, porting, etc. + . + Our home page can be found at + . + https://freetype.org + . + . + . + . + GPL v2: Refer to the copy under /usr/share/common-licenses + . + Additional Freetype Attributions + . + . + --------------------------------- + The below applies to the following file(s): + libfreetype/src/psaux/psarrst.c + libfreetype/src/psaux/psarrst.h + libfreetype/src/psaux/psblues.c + libfreetype/src/psaux/psblues.h + libfreetype/src/psaux/pserror.c + libfreetype/src/psaux/pserror.h + libfreetype/src/psaux/psfixed.h + libfreetype/src/psaux/psfont.c + libfreetype/src/psaux/psfont.h + libfreetype/src/psaux/psft.c + libfreetype/src/psaux/psft.h + libfreetype/src/psaux/psglue.h + libfreetype/src/psaux/pshints.c + libfreetype/src/psaux/pshints.h + libfreetype/src/psaux/psintrp.c + libfreetype/src/psaux/psintrp.h + libfreetype/src/psaux/psread.c + libfreetype/src/psaux/psread.h + libfreetype/src/psaux/psstack.c + libfreetype/src/psaux/psstack.h + libfreetype/src/psaux/pstypes.h + . + Copyright (C) 2006-2014 Adobe Systems Incorporated. + . + This software, and all works of authorship, whether in source or + object code form as indicated by the copyright notice(s) included + herein (collectively, the "Work") is made available, and may only be + used, modified, and distributed under the FreeType Project License, + LICENSE.TXT. Additionally, subject to the terms and conditions of the + FreeType Project License, each contributor to the Work hereby grants + to any individual or legal entity exercising permissions granted by + the FreeType Project License and this section (hereafter, "You" or + "Your") a perpetual, worldwide, non-exclusive, no-charge, + royalty-free, irrevocable (except as stated in this section) patent + license to make, have made, use, offer to sell, sell, import, and + otherwise transfer the Work, where such license applies only to those + patent claims licensable by such contributor that are necessarily + infringed by their contribution(s) alone or by combination of their + contribution(s) with the Work to which such contribution(s) was + submitted. If You institute patent litigation against any entity + (including a cross-claim or counterclaim in a lawsuit) alleging that + the Work or a contribution incorporated within the Work constitutes + direct or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate as of + the date such litigation is filed. + . + By using, modifying, or distributing the Work you indicate that you + have read and understood the terms and conditions of the + FreeType Project License as well as those provided in this section, + and you accept them fully. + . + . + . + . + MIT License + . + . + --------------------------------- + The below applies to the following file(s): + libfreetype/include/freetype/internal/fthash.h + libfreetype/src/base/fthash.c + . + Copyright (C) 2000 Computing Research Labs, New Mexico State University + Copyright (C) 2001-2015 + . + Francesco Zappa Nardelli + . + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT + OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + THE USE OR OTHER DEALINGS IN THE SOFTWARE. + . + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Harfbuzz v14.2.0, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Harfbuzz License + . + . + . + HarfBuzz is licensed under the so-called "Old MIT" license. Details follow. + For parts of HarfBuzz that are licensed under different licenses see individual + files names COPYING in subdirectories where applicable. + . + Copyright © 2010-2024 Google, Inc. + Copyright © 2018-2020 Ebrahim Byagowi + Copyright © 2004-2013 Red Hat, Inc. + Copyright © 2019 Facebook, Inc. + Copyright (C) 2012 Zilong Tan (eric.zltan@gmail.com) + Copyright © 2007 Chris Wilson + Copyright © 2018-2019 Adobe Inc. + Copyright © 2006-2025 Behdad Esfahbod + Copyright © 1998-2004 David Turner and Werner Lemberg + Copyright © 2009 Keith Stribley + Copyright © 2018 Khaled Hosny + Copyright © 2016 Elie Roux + Copyright © 2016 Igalia S.L. + Copyright © 2015 Mozilla Foundation. + Copyright © 1999 David Turner + Copyright © 2005 Werner Lemberg + Copyright © 2013-2015 Alexei Podtelezhnikov + Copyright © 2022 Matthias Clasen + Copyright © 2011 Codethink Limited + . + For full copyright notices consult the individual files in the package. + . + . + Permission is hereby granted, without written agreement and without + license or royalty fees, to use, copy, modify, and distribute this + software and its documentation for any purpose, provided that the + above copyright notice and the following two paragraphs appear in + all copies of this software. + . + IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGE. + . + THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + . + All source code, except for one section, is licensed as above. The one + exception is licensed with a slightly different MIT variant: + The contents of this directory are licensed under the following terms: + . + --------------------------------- + The below applies to the following file(s): + libharfbuzz/hb-ucd.cc + . + Copyright (C) 2012 Grigori Goronzy + . + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + . + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + . + --------------------------------- + The below applies to the following file(s): + libharfbuzz/hb-unicode-emoji-table.hh + . + © 2025 Unicode®, Inc. + . + Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. + in the U.S. and other countries. + For terms of use and license, see https://www.unicode.org/terms_of_use.html + . + . + . + AUTHORS File Information + . + . + Behdad Esfahbod + David Corbett + David Turner + Ebrahim Byagowi + Garret Rieger + Jonathan Kew + Khaled Hosny + Lars Knoll + Martin Hosken + Owen Taylor + Roderick Sheeter + Roozbeh Pournader + Simon Hausmann + Werner Lemberg + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Little Color Management System (LCMS) v2.19.1, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + LCMS License + . + . + MIT License + . + Copyright (C) 1998-2026 Marti Maria Saguer + . + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the Software + is furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO + THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + . + --------------------------------- + The below applies to the following file(s): + liblcms/cmssm.c + . + Copyright (C) 2001, softSurfer (www.softsurfer.com) + . + This code may be freely used and modified for any purpose + providing that this copyright notice is included with it. + SoftSurfer makes no warranty for this code, and cannot be held + liable for any real or imagined damage resulting from its use. + Users of this code must verify correctness for their application. + . + . + . + AUTHORS File Information + . + . + Main Author + ------------ + Marti Maria + . + . + Contributors + ------------ + Bob Friesenhahn + Kai-Uwe Behrmann + Stuart Nixon + Jordi Vilar + Richard Hughes + Auke Nauta + Chris Evans (Google) + Lorenzo Ridolfi + Robin Watts (Artifex) + Shawn Pedersen + Andrew Brygin + Samuli Suominen + Florian Höch + Aurelien Jarno + Claudiu Cebuc + Michael Vhrel (Artifex) + Michal Cihar + Daniel Kaneider + Mateusz Jurczyk (Google) + Paul Miller + Sébastien Léon + Christian Schmitz + XhmikosR + Stanislav Brabec (SuSe) + Leonhard Gruenschloss (Google) + Patrick Noffke + Christopher James Halse Rogers + John Hein + Thomas Weber (Debian) + Mark Allen + Noel Carboni + Sergei Trofimovic + Philipp Knechtges + Amyspark + Lovell Fuller + Eli Schwartz + Diogo Teles Sant'Anna + Vlad Erium + . + Special Thanks + -------------- + Artifex software + AlienSkin software + libVIPS + Jan Morovic + Jos Vernon (WebSupergoo) + Harald Schneider (Maxon) + Christian Albrecht + Dimitrios Anastassakis + Lemke Software + Tim Zaman + Amir Montazery and Open Source Technology Improvement Fund (ostif.org), Google, for fuzzer fundings. + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Mesa 3-D Graphics Library v21.0.3, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Mesa License + . + . + Copyright (C) 1999-2007 Brian Paul All Rights Reserved. + . + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + . + Attention, Contributors + . + When contributing to the Mesa project you must agree to the licensing terms + of the component to which you're contributing. + The following section lists the primary components of the Mesa distribution + and their respective licenses. + Mesa Component Licenses + . + . + . + Component Location License + ------------------------------------------------------------------ + Main Mesa code src/mesa/ MIT + Device drivers src/mesa/drivers/* MIT, generally + . + Gallium code src/gallium/ MIT + . + Ext headers GL/glext.h Khronos + GL/glxext.h Khronos + GL/wglext.h Khronos + KHR/khrplatform.h Khronos + . + ***************************************************************************** + . + ---- + include/GL/gl.h : + . + . + Mesa 3-D graphics library + . + Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + Copyright (C) 2009 VMware, Inc. All Rights Reserved. + . + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + . + ***************************************************************************** + . + ---- + include/GL/glext.h + include/GL/glxext.h + include/GL/wglxext.h : + . + . + Copyright (c) 2013 - 2018 The Khronos Group Inc. + . + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and/or associated documentation files (the + "Materials"), to deal in the Materials without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Materials, and to + permit persons to whom the Materials are furnished to do so, subject to + the following conditions: + . + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Materials. + . + THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + . + ***************************************************************************** + . + ---- + include/KHR/khrplatform.h : + . + Copyright (c) 2008 - 2018 The Khronos Group Inc. + . + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and/or associated documentation files (the + "Materials"), to deal in the Materials without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Materials, and to + permit persons to whom the Materials are furnished to do so, subject to + the following conditions: + . + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Materials. + . + THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + . + ***************************************************************************** + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to PipeWire 1.3.81, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + PipeWire license: + . + All PipeWire header files are licensed under the MIT License: + . + . + . + Copyright © 2018-2023 Wim Taymans + . + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + . + . + The below copyright applies to the following files: + . + spa/include/spa/monitor/type-info.h + . + Copyright © 2021 Collabora Ltd. + . + . + spa/include/spa/utils/string.h + . + Copyright © 2021 Red Hat, Inc. + . + . + spa/utils/cleanup.h: + . + Copyright © 2023 PipeWire authors + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to xwd v1.0.7, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + xwd utility + . + . + This is the copyright for the files in src/java.desktop/unix/native/libawt_xawt: + list.h, multiVis.h, wsutils.h, list.c, multiVis.c + . + Copyright 1994 Hewlett-Packard Co. + Copyright 1996, 1998 The Open Group + . + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation. + . + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + . + Except as contained in this notice, the name of The Open Group shall + not be used in advertising or otherwise to promote the sale, use or + other dealings in this Software without prior written authorization + from The Open Group. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Apache Commons Byte Code Engineering Library (BCEL) Version 6.10.0, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Apache Commons BCEL Notice + . + . + Apache Commons BCEL + Copyright 2004-2022 The Apache Software Foundation + . + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). + . + . + . + Apache 2.0 License: Refer to the copy under /usr/share/common-licenses + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to DOM Level 3 Core Specification v1.0, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + W3C Software Notice + . + Copyright © 2004 World Wide Web Consortium, (Massachusetts Institute of Technology, + European Research Consortium for Informatics and Mathematics, Keio University). + All Rights Reserved. + . + The DOM bindings are published under the W3C Software Copyright Notice and License. + The software license requires "Notice of any changes or modifications to the W3C + files, including the date changes were made." Consequently, modified versions of + the DOM bindings must document that they do not conform to the W3C standard; in the + case of the IDL definitions, the pragma prefix can no longer be 'w3c.org'; in the + case of the Java language binding, the package names can no longer be in the + 'org.w3c' package. + . + . + W3C License + . + . + W3C SOFTWARE NOTICE AND LICENSE + . + http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 + . + This work (and included software, documentation such as READMEs, or other + related items) is being provided by the copyright holders under the following + license. By obtaining, using and/or copying this work, you (the licensee) + agree that you have read, understood, and will comply with the following terms + and conditions. + . + Permission to copy, modify, and distribute this software and its + documentation, with or without modification, for any purpose and without fee + or royalty is hereby granted, provided that you include the following on ALL + copies of the software and documentation or portions thereof, including + modifications: + . + 1.The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work. + . + 2.Any pre-existing intellectual property disclaimers, notices, or terms and + conditions. If none exist, the W3C Software Short Notice should be included + (hypertext is preferred, text is permitted) within the body of any + redistributed or derivative code. + . + 3.Notice of any changes or modifications to the files, including the date + changes were made. (We recommend you provide URIs to the location from + which the code is derived.) + . + THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS + MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT + LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR + PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY + THIRD PARTY PATENTS,COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + . + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL + OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR + DOCUMENTATION. The name and trademarks of copyright holders may NOT be used + in advertising or publicity pertaining to the software without specific, + written prior permission. Title to copyright in this software and any + associated documentation will at all times remain with copyright holders. + . + ____________________________________ + . + This formulation of W3C's notice and license became active on December 31 + 2002. This version removes the copyright ownership notice such that this + license can be used with materials other than those owned by the W3C, reflects + that ERCIM is now a host of the W3C, includes references to this specific + dated version of the license, and removes the ambiguous grant of "use". + Otherwise, this version is the same as the previous version and is written so + as to preserve the Free Software Foundation's assessment of GPL compatibility + and OSI's certification under the Open Source Definition. Please see our + Copyright FAQ for common questions about using materials from our site, + including specific terms and conditions for packages like libwww, Amaya, and + Jigsaw. Other questions about this notice can be directed to + site-policy@w3.org. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to CUP Parser Generator for Java v 0.11b, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + CUP Parser Generator License + . + . + Copyright 1996-2015 by Scott Hudson, Frank Flannery, C. Scott Ananian, Michael Petter + . + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, provided + that the above copyright notice appear in all copies and that both + the copyright notice and this permission notice and warranty disclaimer + appear in supporting documentation, and that the names of the authors or + their employers not be used in advertising or publicity pertaining to + distribution of the software without specific, written prior permission. + . + The authors and their employers disclaim all warranties with regard to + this software, including all implied warranties of merchantability and + fitness. In no event shall the authors or their employers be liable for + any special, indirect or consequential damages or any damages whatsoever + resulting from loss of use, data or profits, whether in an action of + contract, negligence or other tortious action, arising out of or in + connection with the use or performance of this software. + . + --- + . + This is an open source license. It is also GPL-Compatible (see entry for + "Standard ML of New Jersey"). The portions of CUP output which are hard-coded + into the CUP source code are (naturally) covered by this same license, as is + the CUP runtime code linked with the generated parser. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to XML Schema Part 1: Structures Second Edition, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + W3C Software and Document license + . + Software and Document license - 2023 version + . + Copied from: https://www.w3.org/copyright/software-license-2023 + . + License + . + By obtaining and/or copying this work, you (the licensee) agree that you have + read, understood, and will comply with the following terms and conditions. + . + Permission to copy, modify, and distribute this work, with or without modification, + for any purpose and without fee or royalty is hereby granted, provided that you + include the following on ALL copies of the work or portions thereof, including + modifications: + . + The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work. + Any pre-existing intellectual property disclaimers, notices, or terms and + conditions. If none exist, the W3C software and document short notice should + be included. + Notice of any changes or modifications, through a copyright statement on the + new code or document such as "This software or document includes material + copied from or derived from [title and URI of the W3C document]. Copyright © + [$year-of-document] World Wide Web Consortium. + https://www.w3.org/copyright/software-license-2023/" + . + Disclaimers + . + THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR + WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF + MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE + SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, + TRADEMARKS OR OTHER RIGHTS. + . + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. + . + The name and trademarks of copyright holders may NOT be used in advertising or + publicity pertaining to the work without specific, written prior permission. + Title to copyright in this work will at all times remain with copyright holders. + . + ------ + . + Copyright © 2004 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, + trademark and document use rules apply. + . + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to XML Schema Part 2: Datatypes Second Edition, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + W3C Software and Document license + . + Software and Document license - 2023 version + . + Copied from: https://www.w3.org/copyright/software-license-2023 + . + License + . + By obtaining and/or copying this work, you (the licensee) agree that you have + read, understood, and will comply with the following terms and conditions. + . + Permission to copy, modify, and distribute this work, with or without modification, + for any purpose and without fee or royalty is hereby granted, provided that you + include the following on ALL copies of the work or portions thereof, including + modifications: + . + The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work. + Any pre-existing intellectual property disclaimers, notices, or terms and + conditions. If none exist, the W3C software and document short notice should + be included. + Notice of any changes or modifications, through a copyright statement on the + new code or document such as "This software or document includes material + copied from or derived from [title and URI of the W3C document]. Copyright © + [$year-of-document] World Wide Web Consortium. + https://www.w3.org/copyright/software-license-2023/" + . + Disclaimers + . + THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR + WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF + MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE + SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, + TRADEMARKS OR OTHER RIGHTS. + . + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. + . + The name and trademarks of copyright holders may NOT be used in advertising or + publicity pertaining to the work without specific, written prior permission. + Title to copyright in this work will at all times remain with copyright holders. + . + ------ + . + Copyright © 2004 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, + trademark and document use rules apply. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Apache Xalan v2.7.3, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Apache Xalan Notice + . + . + ====================================================================================== + == NOTICE file corresponding to the section 4d of the Apache License, Version 2.0, == + == in this case for the Apache Xalan distribution. == + ====================================================================================== + . + This product includes software developed by + The Apache Software Foundation (http://www.apache.org/). + . + Specifically, we only include the XSLTC portion of the source from the Xalan distribution. + The Xalan project has two processors: an interpretive one (Xalan Interpretive) and a + compiled one (The XSLT Compiler (XSLTC)). We *only* use the XSLTC part of Xalan; We use + the source from the packages that are part of the XSLTC sources. + . + Portions of this software was originally based on the following: + . + - software copyright (c) 1999-2002, Lotus Development Corporation., http://www.lotus.com. + - software copyright (c) 2001-2002, Sun Microsystems., http://www.sun.com. + - software copyright (c) 2003, IBM Corporation., http://www.ibm.com. + - voluntary contributions made by Ovidiu Predescu (ovidiu@cup.hp.com) on behalf of the + Apache Software Foundation and was originally developed at Hewlett Packard Company. + . + . + . + Apache 2.0 License: Refer to the copy under /usr/share/common-licenses + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Apache Xerces v2.12.2, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Apache Xerces Notice + . + ========================================================================= + == NOTICE file corresponding to section 4(d) of the Apache License, == + == Version 2.0, in this case for the Apache Xerces Java distribution. == + ========================================================================= + . + Apache Xerces Java + Copyright 1999-2022 The Apache Software Foundation + . + This product includes software developed at + The Apache Software Foundation (http://www.apache.org/). + . + Portions of this software were originally based on the following: + - software copyright (c) 1999, IBM Corporation., http://www.ibm.com. + - software copyright (c) 1999, Sun Microsystems., http://www.sun.com. + - voluntary contributions made by Paul Eng on behalf of the + Apache Software Foundation that were originally developed at iClick, Inc., + software copyright (c) 1999. + . + . + Apache 2.0 License: Refer to the copy under /usr/share/common-licenses + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to XHTML™ 1.0 The Extensible HyperText Markup Language, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + W3C Software Notice and License + . + W3C(R) SOFTWARE NOTICE AND LICENSE + . + Copyright (c) 1994-2002 World Wide Web Consortium, (Massachusetts + Institute of Technology, Institut National de Recherche en + Informatique et en Automatique, Keio University). All Rights + Reserved. http://www.w3.org/Consortium/Legal/ + . + This W3C work (including software, documents, or other related items) + is being provided by the copyright holders under the following + license. By obtaining, using and/or copying this work, you (the + licensee) agree that you have read, understood, and will comply with + the following terms and conditions: + . + Permission to use, copy, modify, and distribute this software and its + documentation, with or without modification, for any purpose and + without fee or royalty is hereby granted, provided that you include + the following on ALL copies of the software and documentation or + portions thereof, including modifications, that you make: + . + The full text of this NOTICE in a location viewable to users of + the redistributed or derivative work. + . + Any pre-existing intellectual property disclaimers, notices, or + terms and conditions. If none exist, a short notice of the following + form (hypertext is preferred, text is permitted) should be used within + the body of any redistributed or derivative code: "Copyright (C) + [$date-of-software] World Wide Web Consortium, (Massachusetts + Institute of Technology, Institut National de Recherche en + Informatique et en Automatique, Keio University). All Rights + Reserved. http://www.w3.org/Consortium/Legal/" + . + Notice of any changes or modifications to the W3C files, including + the date changes were made. (We recommend you provide URIs to the + location from which the code is derived.) + . + THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT + HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS + FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR + DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, + TRADEMARKS OR OTHER RIGHTS. + . + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL + OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR + DOCUMENTATION. + . + The name and trademarks of copyright holders may NOT be used in + advertising or publicity pertaining to the software without specific, + written prior permission. Title to copyright in this software and any + associated documentation will at all times remain with copyright + holders. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to XHTML™ 1.0 in XML Schema, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + W3C® Intellectual Rights Notice and Legal Disclaimers + . + Copyright © 1994-2002 W3C ® (Massachusetts Institute of Technology, + Institut National de Recherche en Informatique et en Automatique, Keio University), + All Rights Reserved. + . + World Wide Web Consortium (W3C®) web site pages may contain other proprietary + notices and copyright information, the terms of which must be observed and + followed. Specific notices do exist for W3C documents and software. Also, there + are specific usage policies associated with some of the W3C Icons. Please see + our Intellectual Rights FAQ for common questions about using materials from our site. + . + Notice and Disclaimers + . + 1. Unless otherwise noted, all materials contained in this Site are copyrighted + and may not be used except as provided in these terms and conditions or in the + copyright notice (documents and software) or other proprietary notice provided + with the relevant materials. + . + 2. The materials contained in the Site may be downloaded or copied provided that + ALL copies retain the copyright and any other proprietary notices contained on + the materials. No material may be modified, edited or taken out of context such + that its use creates a false or misleading statement or impression as to the + positions, statements or actions of W3C. + . + 3. The name and trademarks of copyright holders may NOT be used in advertising + or publicity pertaining to the Web site, its content, specifications, or + software without specific, written prior permission. Title to copyright in + Web site documents will at all times remain with copyright holders. Use of W3C + trademarks and service marks is covered by the W3C Trademark and Servicemark + License. + . + 4. Caches of W3C materials should comply with the "maximum time to live" + information provided with the materials. After such materials have expired + they should not be served from caches without first validating the contents + of the W3C Site. Organizations that want to mirror W3C content must abide by + the W3C Mirroring Policy. + . + W3C®Trademarks and Generic Terms + Trademarks owned by W3C host institutions on behalf of W3C and generic terms + used by the W3C + . + 5. The trademarks, logos, and service marks (collectively the "Trademarks") + displayed on the Site are registered and unregistered Trademarks of the + Massachusetts Institute of Technology (MIT), Institut National de Recherche + en Informatique et en Automatique (INRIA), or Keio University (Keio). All use + of the W3C Trademarks is governed by the W3C Trademark and Servicemark License. + No additional rights are granted by implication, estoppel, or otherwise. Terms + which claimed as generic are not governed by any W3C license and are used as + common descriptors by the W3C. + . + The following is a list of W3C terms claimed as a trademark or generic term + by MIT, INRIA, and/or Keio on behalf of the W3C: + . + W3C®, World Wide Web Consortium (registered in numerous countries) + Amaya™, a Web Browser + CSS™, Cascading Style Sheets Specification + DOM™, Document Object Model + HTML (generic), HyperText Markup Language + HTTP (generic), Hypertext Transfer Protocol + MathML™, Mathematical Markup Language + Metadata (generic) + P3P™, Platform for Privacy Preferences Project + PICS™, Platform for Internet Content Selection + RDF (generic), Resource Description Framework + SMIL™, Synchronized Multimedia Integration Language + SVG™, Scalable Vector Graphics + WAI™, Web Accessibility Initiative + XENC (generic), XML Encryption + XHTML™, The Extensible HyperText Markup Language + XML (generic), Extensible Markup Language + XSL™, Extensible Stylesheet Language + . + ACSS™, Aural Cascading Style Sheets + DSig™, Digital Signature Initiative + JEPI™, Joint Electronic Payment Initiative + Jigsaw™ + PICSRules™ + WebFonts™ + . + The absence of a product or service name or logo from this list does not + constitute a waiver of MIT's, INRIA's, or Keio's trademark or other intellectual + rights concerning that name or logo. + . + Any questions concerning the use, status, or standing of W3C trademarks should + be directed to: site-policy@w3.org or to W3C (c/o Joseph Reagle), Laboratory + for Computer Science NE43-358, Massachusetts Institute of Technology, 200 + Technology Square, Cambridge, MA 02139. + . + Non-W3C Trademarks; Member Trademarks + . + The trademarks, logos, and service marks not owned on behalf of the W3C and + that are displayed on the Site are the registered and unregistered marks of + their respective owners. No rights are granted by the W3C to use such marks, + whether by implication, estoppel, or otherwise. + . + "METADATA" is a trademark of the Metadata Company. W3C uses the term "metadata" + in a descriptive sense, meaning "data about data". W3C is not in any way + affiliated with the Metadata Company. + Legal Disclaimers + . + 6. W3C has not reviewed any or all of the web sites linked to this Site and is + not responsible for the content of any off-site pages or any other web sites + linked to this Site. Please understand that any non-W3C web site is independent + from W3C, and W3C has no control over the content on that web site. + In addition, a link to a non-W3C web site does not mean that W3C endorses or + accepts any responsibility for the content, or the use, of such site. It is + the user's responsibility to take precautions to ensure that whatever is + selected is free of such items as viruses, worms, Trojan horses and other + items of a destructive nature. + . + 7. Information W3C publishes on its Site may contain references or cross + references to W3C specifications, projects, programs and services that are + not announced or available in your country. Such references do not imply that + W3C intends to announce such specifications, projects, programs or services + in your country. + . + 8. Information on this Site may contain technical inaccuracies or typographical + errors. Information may be changed or updated without notice. W3C may make + improvements and/or changes in the materials contained in or described on this + site at any time without notice. W3C may also make changes in these Terms and + Conditions without notice. User is bound by such revisions and should therefore + periodically visit this page to review the then current Terms and Conditions. + . + 9. Limitation on Warranties. + . + ALL MATERIALS ON THE W3C SITE ARE PROVIDED "AS IS." W3C, MIT, INRIA, AND KEIO + MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT + LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, + TITLE OR NON-INFRINGEMENT. AS TO DOCUMENTS AND GRAPHICS PUBLISHED ON THIS SITE, + W3C, MIT, INRIA, AND KEIO MAKE NO REPRESENTATION OR WARRANTY THAT THE CONTENTS + OF SUCH DOCUMENT OR GRAPHICS ARE FREE FROM ERROR OR SUITABLE FOR ANY PURPOSE; + NOR THAT IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY + PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + . + Please note that some jurisdictions may not allow the exclusion of implied + warranties, so some of the above exclusions may not apply to you. + . + 10. Limitation on Liability. + . + IN NO EVENT WILL W3C, MIT, INRIA, AND KEIO BE LIABLE TO ANY PARTY FOR ANY + DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES FOR ANY USE OF THIS SITE, + OR ON ANY OTHER HYPERLINKED WEB SITE, INCLUDING, WITHOUT LIMITATION, ANY LOST + PROFITS, BUSINESS INTERRUPTION, LOSS OF PROGRAMS OR OTHER DATA ON YOUR + INFORMATION HANDLING SYSTEM OR OTHERWISE, EVEN IF W3C, MIT, INRIA, OR KEIO + IS EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to XHTML™ 1.1 - Module-based XHTML - Second Edition, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + W3C Document license + . + From: https://www.w3.org/copyright/document-license-2023 + . + Copied 10/15/2024 + . + License + . + By using and/or copying this document, or the W3C document from which this + statement is linked, you (the licensee) agree that you have read, understood, + and will comply with the following terms and conditions: + . + Permission to copy, and distribute the contents of this document, or the W3C + document from which this statement is linked, in any medium for any purpose + and without fee or royalty is hereby granted, provided that you include the + following on ALL copies of the document, or portions thereof, that you use: + . + A link or URL to the original W3C document. + The pre-existing copyright notice of the original author, or if it doesn't + exist, a notice (hypertext is preferred, but a textual representation is + permitted) of the form: "Copyright © [$date-of-document] World Wide Web + Consortium. https://www.w3.org/copyright/document-license-2023/" + If it exists, the STATUS of the W3C document. + . + When space permits, inclusion of the full text of this NOTICE should be provided. + We request that authorship attribution be provided in any software, documents, + or other items or products that you create pursuant to the implementation of the + contents of this document, or any portion thereof. + . + No right to create modifications or derivatives of W3C documents is granted + pursuant to this license, except as follows: To facilitate implementation of + the technical specifications set forth in this document, anyone may prepare + and distribute derivative works and portions of this document in software, + in supporting materials accompanying software, and in documentation of software, + PROVIDED that all such works include the notice below. HOWEVER, the publication + of derivative works of this document for use as a technical specification is + expressly prohibited. + . + In addition, "Code Components" —Web IDL in sections clearly marked as Web IDL; + and W3C-defined markup (HTML, CSS, etc.) and computer programming language code + clearly marked as code examples— are licensed under the W3C Software License. + . + The notice is: + . + "Copyright © 2023 W3C®. This software or document includes material copied from + or derived from [title and URI of the W3C document]." + . + Disclaimers + . + THIS DOCUMENT IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS + OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; + THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE + IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, + COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + . + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE + OR IMPLEMENTATION OF THE CONTENTS THEREOF. + . + The name and trademarks of copyright holders may NOT be used in advertising or + publicity pertaining to this document or its contents without specific, written + prior permission. Title to copyright in this document will at all times remain + with copyright holders. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to XHTML 1.1 XML Schema Definition, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + W3C® SOFTWARE NOTICE AND LICENSE + . + http://www.w3.org/Consortium/Legal/copyright-software-19980720 + . + W3C® SOFTWARE NOTICE AND LICENSE + . + Copyright © 1994-2002 World Wide Web Consortium, (Massachusetts Institute of + Technology, Institut National de Recherche en Informatique et en Automatique, + Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/ + . + This W3C work (including software, documents, or other related items) is + being provided by the copyright holders under the following license. By + obtaining, using and/or copying this work, you (the licensee) agree that you + have read, understood, and will comply with the following terms and conditions: + Permission to use, copy, modify, and distribute this software and its + documentation, with or without modification, for any purpose and without fee + or royalty is hereby granted, provided that you include the following on ALL + copies of the software and documentation or portions thereof, including + modifications, that you make: + . + 1. The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work. + . + 2. Any pre-existing intellectual property disclaimers, notices, or terms + and conditions. If none exist, a short notice of the following form (hypertext + is preferred, text is permitted) should be used within the body of any + redistributed or derivative code: "Copyright © [$date-of-software] World Wide + Web Consortium, (Massachusetts Institute of Technology, Institut National de + Recherche en Informatique et en Automatique, Keio University). All Rights + Reserved. http://www.w3.org/Consortium/Legal/" + . + 3. Notice of any changes or modifications to the W3C files, including the + date changes were made. (We recommend you provide URIs to the location from + which the code is derived.) + . + THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE + NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED + TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT + THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY + PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. + . + The name and trademarks of copyright holders may NOT be used in advertising or + publicity pertaining to the software without specific, written prior permission. + Title to copyright in this software and any associated documentation will at all + times remain with copyright holders. + . + The formulation of W3C's notice and license became active on August 14 1998 so + as to improve compatibility with GPL. This version ensures that W3C software + licensing terms are no more restrictive than GPL and consequently W3C software + may be distributed in GPL packages. See the older formulation for the policy + prior to this date. Please see our Copyright FAQ for common questions about + using materials from our site, including specific terms and conditions for + packages like libwww, Amaya, and Jigsaw. Other questions about this notice can + be directed to site-policy@w3.org. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to XML DTD for W3C specifications, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + W3C Software Notice and License + . + W3C(R) SOFTWARE NOTICE AND LICENSE + . + Copyright (c) 1994-2002 World Wide Web Consortium, (Massachusetts + Institute of Technology, Institut National de Recherche en + Informatique et en Automatique, Keio University). All Rights + Reserved. http://www.w3.org/Consortium/Legal/ + . + This W3C work (including software, documents, or other related items) + is being provided by the copyright holders under the following + license. By obtaining, using and/or copying this work, you (the + licensee) agree that you have read, understood, and will comply with + the following terms and conditions: + . + Permission to use, copy, modify, and distribute this software and its + documentation, with or without modification, for any purpose and + without fee or royalty is hereby granted, provided that you include + the following on ALL copies of the software and documentation or + portions thereof, including modifications, that you make: + . + The full text of this NOTICE in a location viewable to users of + the redistributed or derivative work. + . + Any pre-existing intellectual property disclaimers, notices, or + terms and conditions. If none exist, a short notice of the following + form (hypertext is preferred, text is permitted) should be used within + the body of any redistributed or derivative code: "Copyright (C) + [$date-of-software] World Wide Web Consortium, (Massachusetts + Institute of Technology, Institut National de Recherche en + Informatique et en Automatique, Keio University). All Rights + Reserved. http://www.w3.org/Consortium/Legal/" + . + Notice of any changes or modifications to the W3C files, including + the date changes were made. (We recommend you provide URIs to the + location from which the code is derived.) + . + THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT + HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS + FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR + DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, + TRADEMARKS OR OTHER RIGHTS. + . + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL + OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR + DOCUMENTATION. + . + The name and trademarks of copyright holders may NOT be used in + advertising or publicity pertaining to the software without specific, + written prior permission. Title to copyright in this software and any + associated documentation will at all times remain with copyright + holders. + . + ---------- + . + COPYRIGHT: + . + Copyright (C) 2000, 2001, 2002, 2003 Sun Microsystems, Inc. All Rights Reserved. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to The "xml:" Namespace, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + W3C Software and Document license + . + From: https://www.w3.org/copyright/software-license-2023/ + Copied on 2024/10/15 + . + License + . + By obtaining and/or copying this work, you (the licensee) agree that you have + read, understood, and will comply with the following terms and conditions. + . + Permission to copy, modify, and distribute this work, with or without modification, + for any purpose and without fee or royalty is hereby granted, provided that you + include the following on ALL copies of the work or portions thereof, including + modifications: + . + The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work. + Any pre-existing intellectual property disclaimers, notices, or terms and + conditions. If none exist, the W3C software and document short notice should + be included. + Notice of any changes or modifications, through a copyright statement on the + new code or document such as "This software or document includes material + copied from or derived from [title and URI of the W3C document]. Copyright © + [$year-of-document] World Wide Web Consortium. + https://www.w3.org/copyright/software-license-2023/" + . + Disclaimers + . + THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR + WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF + MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE + SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, + TRADEMARKS OR OTHER RIGHTS. + . + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. + . + The name and trademarks of copyright holders may NOT be used in advertising or + publicity pertaining to the work without specific, written prior permission. + Title to copyright in this work will at all times remain with copyright holders. + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Apache Santuario v3.0.5, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Apache 2.0 License: Refer to the copy under /usr/share/common-licenses + . + Apache Santuario Notice + . + . + Apache Santuario - XML Security for Java + Copyright 1999-2024 The Apache Software Foundation + . + This product includes software developed at + The Apache Software Foundation (http://www.apache.org/). + . + It was originally based on software copyright (c) 2001, Institute for + Data Communications Systems, . + . + The development of this software was partly funded by the European + Commission in the project in the ISIS Programme. + . + This product contains software that is + copyright (c) 2021, 2023, Oracle and/or its affiliates. + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to OASIS PKCS #11 Cryptographic Token Interface v3.1, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + OASIS PKCS #11 Cryptographic Token Interface License + . + . + Copyright © OASIS Open 2023. All Rights Reserved. + . + All capitalized terms in the following text have the meanings + assigned to them in the OASIS Intellectual Property Rights Policy (the + "OASIS IPR Policy"). The full Policy may be found at the OASIS website: + [https://www.oasis-open.org/policies-guidelines/ipr/]. + . + This document and translations of it may be copied and furnished to + others, and derivative works that comment on or otherwise explain it or + assist in its implementation may be prepared, copied, published, and + distributed, in whole or in part, without restriction of any kind, + provided that the above copyright notice and this section are included + on all such copies and derivative works. However, this document itself + may not be modified in any way, including by removing the copyright + notice or references to OASIS, except as needed for the purpose of + developing any document or deliverable produced by an OASIS Technical + Committee (in which case the rules applicable to copyrights, as set + forth in the OASIS IPR Policy, must be followed) or as required to + translate it into languages other than English. + . + The limited permissions granted above are perpetual and will not be + revoked by OASIS or its successors or assigns. + . + This document and the information contained herein is provided on an + "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE + INFORMATION HEREIN WILL NOT INFRINGE ANY OWNERSHIP RIGHTS OR ANY IMPLIED + WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. OASIS + AND ITS MEMBERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THIS DOCUMENT OR ANY + PART THEREOF. + . + As stated in the OASIS IPR Policy, the following three paragraphs in + brackets apply to OASIS Standards Final Deliverable documents (Committee + Specifications, OASIS Standards, or Approved Errata). + . + [OASIS requests that any OASIS Party or any other party that + believes it has patent claims that would necessarily be infringed by + implementations of this OASIS Standards Final Deliverable, to notify + OASIS TC Administrator and provide an indication of its willingness to + grant patent licenses to such patent claims in a manner consistent with + the IPR Mode of the OASIS Technical Committee that produced this + deliverable.] + . + [OASIS invites any party to contact the OASIS TC Administrator if it + is aware of a claim of ownership of any patent claims that would + necessarily be infringed by implementations of this OASIS Standards + Final Deliverable by a patent holder that is not willing to provide a + license to such patent claims in a manner consistent with the IPR Mode + of the OASIS Technical Committee that produced this OASIS Standards + Final Deliverable. OASIS may include such claims on its website, but + disclaims any obligation to do so.] + . + [OASIS takes no position regarding the validity or scope of any + intellectual property or other rights that might be claimed to pertain + to the implementation or use of the technology described in this OASIS + Standards Final Deliverable or the extent to which any license under + such rights might or might not be available; neither does it represent + that it has made any effort to identify any such rights. Information on + OASIS' procedures with respect to rights in any document or deliverable + produced by an OASIS Technical Committee can be found on the OASIS + website. Copies of claims of rights made available for publication and + any assurances of licenses to be made available, or the result of an + attempt made to obtain a general license or permission for the use of + such proprietary rights by implementers or users of this OASIS Standards + Final Deliverable, can be obtained from the OASIS TC Administrator. + OASIS makes no representation that any information or list of + intellectual property rights will at any time be complete, or that any + claims in such list are, in fact, Essential Claims.] + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to IAIK (Institute for Applied Information Processing and Communication) PKCS#11 wrapper files v1, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + IAIK License + . + . + Copyright (c) 2002 Graz University of Technology. All rights reserved. + . + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + . + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + . + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: + . + "This product includes software developed by IAIK of Graz University of + Technology." + . + Alternately, this acknowledgment may appear in the software itself, if and + wherever such third-party acknowledgments normally appear. + . + 4. The names "Graz University of Technology" and "IAIK of Graz University of + Technology" must not be used to endorse or promote products derived from this + software without prior written permission. + . + 5. Products derived from this software may not be called "IAIK PKCS Wrapper", + nor may "IAIK" appear in their name, without prior written permission of + Graz University of Technology. + . + THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + LICENSOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Dynalink v.5, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Dynalink License + . + . + Copyright (c) 2009-2013, Attila Szegedi + . + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the copyright holder nor the names of + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER + BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to JLine v3.29.0, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + JLine License + . + . + Copyright (c) 2002-2023, the original author or authors. + All rights reserved. + . + https://opensource.org/licenses/BSD-3-Clause + . + Redistribution and use in source and binary forms, with or + without modification, are permitted provided that the following + conditions are met: + . + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + . + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with + the distribution. + . + Neither the name of JLine nor the names of its contributors + may be used to endorse or promote products derived from this + software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, + BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to CommonMark 0.22.0, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + CommonMark License + . + Copyright (c) 2015, Atlassian Pty Ltd + All rights reserved. + . + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + . + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to jopt-simple v5.0.4, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + MIT License + . + . + Copyright (c) 2004-2015 Paul R. Holser, Jr. + . + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to DejaVu fonts v2.37, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + DejaVu License + . + Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. + Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) + . + . + Bitstream Vera Fonts Copyright + ------------------------------ + . + Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is + a trademark of Bitstream, Inc. + . + Permission is hereby granted, free of charge, to any person obtaining a copy + of the fonts accompanying this license ("Fonts") and associated + documentation files (the "Font Software"), to reproduce and distribute the + Font Software, including without limitation the rights to use, copy, merge, + publish, distribute, and/or sell copies of the Font Software, and to permit + persons to whom the Font Software is furnished to do so, subject to the + following conditions: + . + The above copyright and trademark notices and this permission notice shall + be included in all copies of one or more of the Font Software typefaces. + . + The Font Software may be modified, altered, or added to, and in particular + the designs of glyphs or characters in the Fonts may be modified and + additional glyphs or characters may be added to the Fonts, only if the fonts + are renamed to names not containing either the words "Bitstream" or the word + "Vera". + . + This License becomes null and void to the extent applicable to Fonts or Font + Software that has been modified and is distributed under the "Bitstream + Vera" names. + . + The Font Software may be sold as part of a larger software package but no + copy of one or more of the Font Software typefaces may be sold by itself. + . + THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, + TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME + FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING + ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE + FONT SOFTWARE. + . + Except as contained in this notice, the names of Gnome, the Gnome + Foundation, and Bitstream Inc., shall not be used in advertising or + otherwise to promote the sale, use or other dealings in this Font Software + without prior written authorization from the Gnome Foundation or Bitstream + Inc., respectively. For further information, contact: fonts at gnome dot + org. + . + Arev Fonts Copyright + ------------------------------ + . + Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. + . + Permission is hereby granted, free of charge, to any person obtaining + a copy of the fonts accompanying this license ("Fonts") and + associated documentation files (the "Font Software"), to reproduce + and distribute the modifications to the Bitstream Vera Font Software, + including without limitation the rights to use, copy, merge, publish, + distribute, and/or sell copies of the Font Software, and to permit + persons to whom the Font Software is furnished to do so, subject to + the following conditions: + . + The above copyright and trademark notices and this permission notice + shall be included in all copies of one or more of the Font Software + typefaces. + . + The Font Software may be modified, altered, or added to, and in + particular the designs of glyphs or characters in the Fonts may be + modified and additional glyphs or characters may be added to the + Fonts, only if the fonts are renamed to names not containing either + the words "Tavmjong Bah" or the word "Arev". + . + This License becomes null and void to the extent applicable to Fonts + or Font Software that has been modified and is distributed under the + "Tavmjong Bah Arev" names. + . + The Font Software may be sold as part of a larger software package but + no copy of one or more of the Font Software typefaces may be sold by + itself. + . + THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL + TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL + DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM + OTHER DEALINGS IN THE FONT SOFTWARE. + . + Except as contained in this notice, the name of Tavmjong Bah shall not + be used in advertising or otherwise to promote the sale, use or other + dealings in this Font Software without prior written authorization + from Tavmjong Bah. For further information, contact: tavmjong @ free + . fr. + . + TeX Gyre DJV Math + ----------------- + Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. + . + Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski + (on behalf of TeX users groups) are in public domain. + . + Letters imported from Euler Fraktur from AMSfonts are (c) American + Mathematical Society (see below). + Bitstream Vera Fonts Copyright + Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera + is a trademark of Bitstream, Inc. + . + Permission is hereby granted, free of charge, to any person obtaining a copy + of the fonts accompanying this license ("Fonts") and associated + documentation + files (the "Font Software"), to reproduce and distribute the Font Software, + including without limitation the rights to use, copy, merge, publish, + distribute, + and/or sell copies of the Font Software, and to permit persons to whom + the Font Software is furnished to do so, subject to the following + conditions: + . + The above copyright and trademark notices and this permission notice + shall be + included in all copies of one or more of the Font Software typefaces. + . + The Font Software may be modified, altered, or added to, and in particular + the designs of glyphs or characters in the Fonts may be modified and + additional + glyphs or characters may be added to the Fonts, only if the fonts are + renamed + to names not containing either the words "Bitstream" or the word "Vera". + . + This License becomes null and void to the extent applicable to Fonts or + Font Software + that has been modified and is distributed under the "Bitstream Vera" + names. + . + The Font Software may be sold as part of a larger software package but + no copy + of one or more of the Font Software typefaces may be sold by itself. + . + THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, + TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME + FOUNDATION + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, + SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN + ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR + INABILITY TO USE + THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. + Except as contained in this notice, the names of GNOME, the GNOME + Foundation, + and Bitstream Inc., shall not be used in advertising or otherwise to promote + the sale, use or other dealings in this Font Software without prior written + authorization from the GNOME Foundation or Bitstream Inc., respectively. + For further information, contact: fonts at gnome dot org. + . + AMSFonts (v. 2.2) copyright + . + The PostScript Type 1 implementation of the AMSFonts produced by and + previously distributed by Blue Sky Research and Y&Y, Inc. are now freely + available for general use. This has been accomplished through the + cooperation + of a consortium of scientific publishers with Blue Sky Research and Y&Y. + Members of this consortium include: + . + Elsevier Science IBM Corporation Society for Industrial and Applied + Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS) + . + In order to assure the authenticity of these fonts, copyright will be + held by + the American Mathematical Society. This is not meant to restrict in any way + the legitimate use of the fonts, such as (but not limited to) electronic + distribution of documents containing these fonts, inclusion of these fonts + into other public domain or commercial font collections or computer + applications, use of the outline data to create derivative fonts and/or + faces, etc. However, the AMS does require that the AMS copyright notice be + removed from any derivative versions of the fonts which have been altered in + any way. In addition, to ensure the fidelity of TeX documents using Computer + Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces, + has requested that any alterations which yield different font metrics be + given a different name. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Highlight.js v11.11.1, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Highlight.js License + . + BSD 3-Clause License + . + Copyright (c) 2006, Ivan Sagalaev. + All rights reserved. + . + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + . + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + . + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to jQuery v3.7.1, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + jQuery License + . + jQuery v 3.7.1 + Copyright OpenJS Foundation and other contributors, https://openjsf.org/ + . + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to jQuery UI v1.14.1, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + jQuery UI License + . + Copyright OpenJS Foundation and other contributors, https://openjsf.org/ + . + This software consists of voluntary contributions made by many + individuals. For exact contribution history, see the revision history + available at https://github.com/jquery/jquery-ui + . + The following license applies to all parts of this software except as + documented below: + . + ==== + . + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + . + ==== + . + Copyright and related rights for sample code are waived via CC0. Sample + code is defined as all source code contained within the demos directory. + . + CC0: http://creativecommons.org/publicdomain/zero/1.0/ + . + ==== + . + All files located in the node_modules and external directories are + externally maintained libraries used by this software which have their + own licenses; we recommend you read them, as their terms may differ from + the terms above. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Unicode Common Local Data Repository (CLDR) v47, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + CLDR License + . + . + . + . + UNICODE LICENSE V3 + . + COPYRIGHT AND PERMISSION NOTICE + . + Copyright © 1991-2025 Unicode, Inc. + . + NOTICE TO USER: Carefully read the following legal agreement. BY + DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR + SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE + TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT + DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. + . + Permission is hereby granted, free of charge, to any person obtaining a + copy of data files and any associated documentation (the "Data Files") or + software and any associated documentation (the "Software") to deal in the + Data Files or Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, and/or sell + copies of the Data Files or Software, and to permit persons to whom the + Data Files or Software are furnished to do so, provided that either (a) + this copyright and permission notice appear with all copies of the Data + Files or Software, or (b) this copyright and permission notice appear in + associated Documentation. + . + THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF + THIRD PARTY RIGHTS. + . + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE + BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, + OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA + FILES OR SOFTWARE. + . + Except as contained in this notice, the name of a copyright holder shall + not be used in advertising or otherwise to promote the sale, use or other + dealings in these Data Files or Software without prior written + authorization of the copyright holder. + . + SPDX-License-Identifier: Unicode-3.0 + . + ———————————— + . + Unicode® Copyright and Terms of Use + For the general privacy policy governing access to this site, see the Unicode Privacy Policy. + . + Unicode Copyright + Copyright © 1991-2025 Unicode, Inc. All rights reserved. + Definitions + Unicode Data Files ("DATA FILES") include all data files under the directories: + https://www.unicode.org/Public/ + https://www.unicode.org/reports/ + https://www.unicode.org/ivd/data/ + . + Unicode Data Files do not include PDF online code charts under the directory: + https://www.unicode.org/Public/ + . + Unicode Software ("SOFTWARE") includes any source code published in the Unicode Standard + or any source code or compiled code under the directories: + https://www.unicode.org/Public/PROGRAMS/ + https://www.unicode.org/Public/cldr/ + http://site.icu-project.org/download/ + Terms of Use + Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein. + Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files, subject to the Terms and Conditions herein. + Further specifications of rights and restrictions pertaining to the use of the Unicode DATA FILES and SOFTWARE can be found in the Unicode Data Files and Software License. + Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. + The Unicode PDF online code charts carry specific restrictions. Those restrictions are incorporated as the first page of each PDF code chart. + All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use. + No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site. + Modification is not permitted with respect to this document. All copies of this document must be verbatim. + Restricted Rights Legend + Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement. + Warranties and Disclaimers + This publication and/or website may include technical or typographical errors or other inaccuracies. Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode, Inc. may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time. + If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase. + EXCEPT AS PROVIDED IN SECTION E.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE. + Waiver of Damages + In no event shall Unicode, Inc. or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode, Inc. was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives. + Trademarks & Logos + The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names. + The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc. + All third party trademarks referenced herein are the property of their respective owners. + Miscellaneous + Jurisdiction and Venue. This website is operated from a location in the State of California, United States of America. Unicode, Inc. makes no representation that the materials are appropriate for use in other locations. If you access this website from other locations, you are responsible for compliance with local laws. This Agreement, all use of this website and any claims and damages resulting from use of this website are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this website shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum. + Modification by Unicode, Inc. Unicode, Inc. shall have the right to modify this Agreement at any time by posting it to this website. The user may not assign any part of this Agreement without Unicode, Inc.’s prior written consent. + Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income. + Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect. + Entire Agreement. This Agreement constitutes the entire agreement between the parties. + . + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + %% This notice is provided with respect to Thai Dictionary, + which may be included with JRE 25, JDK 25 and OpenJDK 25 + . + --- begin of LICENSE --- + . + Thai Dictionary License + . + . + Copyright (C) 1982 The Royal Institute, Thai Royal Government. + . + Copyright (C) 1998 National Electronics and Computer Technology Center, + National Science and Technology Development Agency, + Ministry of Science Technology and Environment, + Thai Royal Government. + . + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + . + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + . + . + . + --- end of LICENSE --- + . + ------------------------------------------------------------------------------ + +Files: googletest/* +Copyright: Copyright 2008, Google Inc. +License: BSD-C3 + Copyright 2008, Google Inc. + All rights reserved. + . + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + . + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Files: debian/* +Copyright: Copyright © 2007-2023 Canonical Ltd. +License: MIT + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Files: debian/dbg.py +Copyright: Copyright 2016, Red Hat and individual contributors +License: LGPL + # Copyright 2016, Red Hat and individual contributors + # by the @authors tag. + # + # This is free software; you can redistribute it and/or modify it + # under the terms of the GNU Lesser General Public License as + # published by the Free Software Foundation; either version 2.1 of + # the License, or (at your option) any later version. + # + # This software is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + # Lesser General Public License for more details. + . + On Debian systems a full copy of the GNU General Public License, GPL, can be + found in the file /usr/share/common-licenses/GPL-2. + diff --git a/copyright-generator/bundled-stanzas b/copyright-generator/bundled-stanzas new file mode 100644 index 000000000..e70894184 --- /dev/null +++ b/copyright-generator/bundled-stanzas @@ -0,0 +1,31 @@ +Files: googletest/* +Copyright: Copyright 2008, Google Inc. +License: BSD-C3 + Copyright 2008, Google Inc. + All rights reserved. + . + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + . + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/copyright-generator/copyright-gen.py b/copyright-generator/copyright-gen.py new file mode 100755 index 000000000..346deb47d --- /dev/null +++ b/copyright-generator/copyright-gen.py @@ -0,0 +1,316 @@ +#!/usr/bin/python3 + +# This script needs to be run from the `debian/copyright-generator` directory. + +# This is an initial version of a script that generates the copyrights file +# for the openjdk-XX packages. A lot of information is still hard-coded, +# which means the script needs to be improved. +# +# For instance, it must be possible to parse all the copyright headers from +# all the source files and deduce a list of "Upstream Authors". It must +# also be possible to deduce the smallest yet complete list of copyrights. +# For now, we have these hard-coded in the "copyright-gen/upstream-authors" +# and "copyright-gen/copyrights" file. +# +# Licenses from the legal directories of different modules are gathered and +# dumped under the License field of the first File stanza. +# The debian build does not build native libraries like zlib, pcsclite, giflib +# libpng and libjpeg. These are excluded. There's scope for improvement here too. +# The script must be able to look into "debian/rules" and deduce these exclusions. + +import os +import re +import sys +import textwrap + +version = ""; +needs_cleanup = False +packaged_by = "Matthias Klose "; +common_licenses = {}; + +## TODO: Can the script deduce this list? +excluded_files = [ + ".github/*", + ".gitattributes", + "src/java.base/share/native/libzip/zlib/*", + "src/java.desktop/share/native/libsplashscreen/giflib/*", + "src/java.desktop/share/native/libsplashscreen/libpng/*", + "src/java.smartcardio/unix/native/libj2pcsc/MUSCLE/*", + "src/java.desktop/share/native/libjavajpeg/jc*", + "src/java.desktop/share/native/libjavajpeg/jd*", + "src/java.desktop/share/native/libjavajpeg/je*", + "src/java.desktop/share/native/libjavajpeg/jf*", + "src/java.desktop/share/native/libjavajpeg/ji*.c", + "src/java.desktop/share/native/libjavajpeg/jm*", + "src/java.desktop/share/native/libjavajpeg/jpegi*", + "src/java.desktop/share/native/libjavajpeg/jpeglib.h", + "src/java.desktop/share/native/libjavajpeg/jq*", + "src/java.desktop/share/native/libjavajpeg/jv*", + "src/java.desktop/share/native/libjavajpeg/ju*", + "src/java.desktop/share/native/libjavajpeg/README" +] + +## TODO: Can the script deduce this list? +openjdk_copyrights = [ + "Copyright (c) 1996-2025 Oracle and/or its affiliates.", + "Copyright (c) 1996-2003 Sun Microsystems, Inc.", + "Copyright (c) 2009-2012 Red Hat, Inc.", + "Copyright (c) 2012-2022 SAP SE.", + "Copyright (c) 2020-2021 Azul Systems, Inc.", + "Copyright (c) 1999-2022 The Apache Software Foundation.", + "Copyright (c) 2020-2021 Microsoft Corporation", + "Copyright (c) 2009-2022 Google LLC", + "Copyright (c) 2020-2021 Amazon.com, Inc", + "Copyright (c) 2021 Alibaba Group Holding Limited", + "Copyright (c) 2019-2021 Huawei Technologies Co. Ltd.", + "Copyright (c) 2021-2023 BELLSOFT", + "Copyright (c) 2022-23 THL A29 Limited, a Tencent company.", + "Copyright (c) 2021-2023, Arm Limited.", + "Copyright (C) 2014-2017 by Vitaly Puzrin and Andrei Tuputcyn.", + "Copyright (c) 2017 Instituto de Pesquisas Eldorado.", + "Copyright (c) 1999-2007 Brian Paul.", + "Copyright (c) 2018-2019 Adobe Inc.", + "Copyright 2006-2014 Adobe Systems Incorporated.", + "Copyright 1994-2011 Hewlett-Packard Co.", + "Portions Copyright (c) 2011-2014 IBM Corporation", + "Portions Copyright (c) 1995 Colin Plumb", + "Portions Copyright (c) 1997-2003 Eastman Kodak Company", + "See other third party notices under the License section" +] + +## TODO: Can the script deduce this list? +upstream_authors = [ + "Oracle and/or its affiliates", + "Sun Microsystems, Inc", + "Red Hat, Inc", + "SAP SE", + "Azul Systems, Inc", + "Apache Software Foundation", + "Microsoft Corporation", + "Intel Corportation", + "IBM Corporation", + "Google LLC", + "Amazon.com, Inc", + "Other contributors", + "See the third party licenses below." +] + +exclude_licenses = ["zlib.md", "pcsclite.md", "giflib.md", "libpng.md", "jpeg.md"] + +def print_field(name, single_line, value): + print(name + ":", end="") + if (single_line): + print(" " + value) + else: + print("\n" + value) + +def print_header_stanza(format, files_excluded, source, comment): + print_field("Format", True, format) + print_field("Files-Excluded", False, files_excluded) + print_field("Source", True, source) + print_field("Comment", False, comment) + print() # an empty line + +def print_file_stanza(files, copyrights, license, comments): + print_field("Files", True, files) + print_field("Copyright", False, copyrights) + print_field("License", True, license) + if (comments is not None and len(comments) != 0): + print_field("Comments", True, comments) + print() # an empty line + +def generate_excluded_files_str(): + return " " + "\n ".join(excluded_files) + +def generate_comment_str(): + upstream_authors_str = "\n ".join(upstream_authors) + return f""" Upstream Authors: + OpenJDK: + {upstream_authors_str} + Packaged by: + {packaged_by}""" + +def generate_header_stanza(): + format = "https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/" + excluded = generate_excluded_files_str() + source = "https://github.com/openjdk/jdk25u" + comment = generate_comment_str() + print_header_stanza(format, excluded, source, comment) + +def strip_license_line(line:str): + return line.replace("### ","").replace("```", "").replace("
", "").replace("
", "") + +def get_content(path): + lines = [] + COMMON_LICENSES = ["### Apache 2.0 License", + "### GNU GENERAL PUBLIC LICENSE v2", + "### GPL v2", + "### GPL version 3", + "### GNU GENERAL PUBLIC LICENSE v3", + "### Apache License v2.0"] + skip = False + with open(path, 'r') as file: + for line in file: + if skip: + if line.startswith("### "): + skip = False + else: + continue + stripped = line.strip("\n") + if stripped in COMMON_LICENSES: + line = stripped + ": Refer to the copy under /usr/share/common-licenses\n\n" + lines.append(strip_license_line(line)) + skip = True + if not skip: + lines.append(strip_license_line(line)) + return lines[0], "".join(lines[1:]) + + +def fill_with_dots_and_indent(text): + indentation = " " * 2 + # Setting a large arbitrary width because we don't want to wrap lines + wrapper = textwrap.TextWrapper(initial_indent=indentation, width=2000, subsequent_indent=indentation, drop_whitespace=False) + lines = text.split("\n") + out = [] + for line in lines: + if line.strip() == "": + line = "." + out.append(wrapper.fill(line)) + return "\n".join(out) + +def gen_comment(component): + return f"""%% This notice is provided with respect to {component}, +which may be included with JRE {version}, JDK {version} and OpenJDK {version}""" + +def gen_license_text(license): + print("Gathering license content for " + license, file=sys.stderr) + component, content = get_content(license) + component = component.split("## ")[1].rstrip("\n"); + return f""" +{gen_comment(component)} + +--- begin of LICENSE --- +{content} +--- end of LICENSE --- + +------------------------------------------------------------------------------""" + + +def gather_legal_dirs(path): + legal_dirs = [] + for root, dirs, files in os.walk(path): + if "legal" in dirs and (root.endswith("share") or root.endswith("unix")): + legal_dirs.append(os.path.join(root, "legal")) + return legal_dirs + +def gather_licenses(module): + legal_dirs = gather_legal_dirs(module) + licenses_text = "" + for dir in sorted(legal_dirs): + licenses = os.listdir(dir) + for license in sorted(licenses): + if not license in exclude_licenses: + licenses_text += gen_license_text(dir + "/" + license) + return licenses_text + +def gather_modules_licenses(srcdir): + licenses = "" + modules = os.listdir(srcdir) + for module in sorted(modules): + licenses += gather_licenses(srcdir + "/" + module) + return licenses + +def find_directory(prefix, path = '.'): + for file in os.scandir(path): + if file.is_dir() and file.name.startswith(prefix): + return file.path + +def search_source_rootdir(level, path = '.'): + if os.path.exists(path + "/ASSEMBLY_EXCEPTION"): + print("Assembly exception found. Skipping source package search.", file=sys.stderr) + return "." + + # The user might have already pulled the source package. + # Search for a downloaded package at three levels + # - openjdk + # - openjdk/debian + # - openjdk/debian/copyright-generator + # if one none found, download the source package + + rootdir = find_directory(f"openjdk-{version}", path) + if rootdir is not None: + return rootdir + + match level: + case 0: + path = "./debian" + level= level + 1 + case 1: + path = "./debian/copyright-generator" + level = level + 1 + case 2: + print("No source package found. Downloading...", file = sys.stderr) + os.system(f"pull-debian-source openjdk-{version} > /dev/null 2>&1") + needs_cleanup = True + return find_directory(f"openjdk-{version}") + case _: + print("Irrecoverable error while searching for source package") + exit(1) + + return search_source_rootdir(level, path) + +def generate_copyright(): + rootdir = search_source_rootdir(0) + if rootdir is None: + print("No source package found. Download also failed. Aborting.") + exit(2) + print(f"Using the source package at {rootdir}", file = sys.stderr) + srcdir = f"{rootdir}/src"; + + generate_header_stanza(); + + licenses = f"""GPL with Classpath exception + +--- begin of LICENSE --- + +{open(rootdir + "/LICENSE").read()} +--- end of LICENSE --- + +------------------------------------------------------------------------------ +The following licenses for third party code are taken from 'legal' \ndirectories of modules under src/ +------------------------------------------------------------------------------ +{gather_modules_licenses(srcdir)}""" + + print_file_stanza("*", " " + "\n ".join(openjdk_copyrights), fill_with_dots_and_indent(licenses), "") + if (version != "11"): + print(open("./debian/copyright-generator/bundled-stanzas").read()) + print(open("./debian/copyright-generator/debian-stanzas").read()) + + # clean-up + if needs_cleanup: + os.system(f"rm -rf *.debian.tar.xz *.orig.tar.xz *.dsc *googletest.tar.xz"); + + + +def detect_version(): + with open("debian/rules", 'r') as file: + content = file.read() + match = re.search(r'shortver\t=\s+(\d{2})', content) + if match: + return match.group(1) + +def main(): + global version + + version = detect_version() + + sys.stdout = open('./debian/copyright', 'w') + supported_versions = ["11", "17", "21", "22", "23", "24", "25"] + + if version in supported_versions: + generate_copyright() + else: + print("Version not supported.") + +if __name__ == "__main__": + main() diff --git a/copyright-generator/debian-stanzas b/copyright-generator/debian-stanzas new file mode 100644 index 000000000..e8ae199c5 --- /dev/null +++ b/copyright-generator/debian-stanzas @@ -0,0 +1,40 @@ +Files: debian/* +Copyright: Copyright © 2007-2023 Canonical Ltd. +License: MIT + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + . + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + . + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Files: debian/dbg.py +Copyright: Copyright 2016, Red Hat and individual contributors +License: LGPL + # Copyright 2016, Red Hat and individual contributors + # by the @authors tag. + # + # This is free software; you can redistribute it and/or modify it + # under the terms of the GNU Lesser General Public License as + # published by the Free Software Foundation; either version 2.1 of + # the License, or (at your option) any later version. + # + # This software is distributed in the hope that it will be useful, + # but WITHOUT ANY WARRANTY; without even the implied warranty of + # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + # Lesser General Public License for more details. + . + On Debian systems a full copy of the GNU General Public License, GPL, can be + found in the file /usr/share/common-licenses/GPL-2. diff --git a/dbg.py b/dbg.py new file mode 100644 index 000000000..23bf906b2 --- /dev/null +++ b/dbg.py @@ -0,0 +1,1260 @@ +# Copyright 2016, Red Hat and individual contributors +# by the @authors tag. +# +# This is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this software; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA, or see the FSF site: http://www.fsf.org. +# +# @authors Andrew Dinn + +import gdb +import traceback +import re +from gdb.FrameDecorator import FrameDecorator + +# we rely on the unwinder API provided by gdb.7.10 +_debug = False +_warning = False + +def warning(*args, **kwargs): + if _warning: + gdb.write(*args, **kwargs) + +def debug(*args, **kwargs): + if _debug: + gdb.write(*args, **kwargs) + +_dump_frame = False +_have_unwinder = True +try: + from gdb.unwinder import Unwinder + gdb.write("Installing openjdk unwinder\n") +except ImportError: + _have_unwinder = False + # We need something here; it doesn't matter what as no unwinder + # will ever be instantiated. + Unwinder = object + + +def debug_write(msg): + debug(msg) + # pass + +def t(msg): + debug("%s\n" % msg) + # pass + +debug("dbg.py\n") + +# class providing various type conversions for gdb Value instances + +class Types(object): + # cache some basic primitive and pointer types + byte_t = gdb.lookup_type('unsigned char') + char_t = gdb.lookup_type('char') + int_t = gdb.lookup_type('int') + long_t = gdb.lookup_type('long') + void_t = gdb.lookup_type('void') + + bytep_t = byte_t.pointer() + charp_t = char_t.pointer() + intp_t = int_t.pointer() + longp_t = long_t.pointer() + voidp_t = void_t.pointer() + + codeblobp_t = gdb.lookup_type('CodeBlob').pointer() + nmethodp_t = gdb.lookup_type('nmethod').pointer() + + ptrp_t = voidp_t.pointer() + + # convert Values to primitive Values + @classmethod + def cast_byte(cls, value): + return value.cast(cls.byte_t) + + @classmethod + def cast_int(cls, value): + return value.cast(cls.int_t) + + @classmethod + def cast_long(cls, value): + return value.cast(cls.long_t) + + # convert Values to pointer Values + @classmethod + def cast_bytep(cls, value): + return value.cast(cls.bytep_t) + + @classmethod + def cast_intp(cls, value): + return value.cast(cls.intp_t) + + @classmethod + def cast_longp(cls, value): + return value.cast(cls.longp_t) + + @classmethod + def cast_voidp(cls, value): + return value.cast(cls.voidp_t) + + @classmethod + def cast_ptrp(cls, value): + return value.cast(cls.ptrp_t) + + # cast Value to pointer type then load and return contents as Value + @classmethod + def load_ptr(cls, value): + return cls.cast_ptrp(cls.cast_ptrp(value).dereference()) + + @classmethod + def load_byte(cls, value): + return cls.cast_bytep(value).dereference() + + @classmethod + def load_int(cls, value): + return cls.cast_intp(value).dereference() + + @classmethod + def load_long(cls, value): + return cls.cast_longp(value).dereference() + + # cast Value to int and return as python integer + @classmethod + def as_int(cls, value): + return int(cls.cast_int(value)) + + # cast Value to long and return as python integer + @classmethod + def as_long(cls, value): + return int(cls.cast_long(value)) + + # construct Value from integer x and cast to type t + @classmethod + def to_type(cls, x, t): + return gdb.Value(x).cast(t) + + # construct voidp Value from integer x + @classmethod + def to_voidp(cls, x): + return cls.to_type(x, cls.voidp_t) + + # construct void ** Value from integer x + @classmethod + def to_ptrp(cls, x): + return cls.to_type(x, cls.ptrp_t) + +# OpenJDK specific classes which understand the layout of the code +# heap and know how to translate a PC to an associated code blob and, +# from there to a method object. n.b. in some cases the latter step +# requires a frame base pointer bu tthat can be calculated using the +# code blob and stack pointer + +# class encapsulating details of a specific heap + +class CodeHeap: + + # track whether we have static initialized yet + class_inited = False + heap_block_type = None + code_blob_type = None + + @classmethod + def class_init(cls): + t("CodeHeap.class_init") + if cls.class_inited: + return + # we can only proceed if we have the necessary heap symbols + # if this excepts then we don't care + cls.heap_block_type = gdb.lookup_type("HeapBlock").pointer() + cls.code_blob_type = gdb.lookup_type("CodeBlob").pointer() + cls.class_inited = True + + def __init__(self, heap): + t("CodeHeap.__init__") + # make sure we have static inited successfuly + self.class_init() + # if we got here we are ok to create a new instance + self.heap = heap + self.name = str(heap['_name']) + self.lo = Types.as_long(heap['_memory']['_low_boundary']) + self.hi = Types.as_long(heap['_memory']['_high_boundary']) + self.segmap = heap['_segmap'] + self.segmap_lo = self.segmap['_low'] + self.segment_size = int(heap['_segment_size']) + self.log2_segment_size = int(heap['_log2_segment_size']) + debug("@@ heap.name = %s\n" % self.name) + debug("@@ heap.lo = 0x%x\n" % self.lo) + debug("@@ heap.hi = 0x%x\n" % self.hi) + + def inrange(self, x): + debug("CodeHeap.inrange") + return self.lo <= x and self.hi > x + def findblob(self, pc): + debug("CodeHeap.findblob") + x = Types.as_long(pc) + debug("@@ findblob(%s, 0x%x)\n" % (self.name, pc)) + debug("@@ pc (%s) = 0x%x \n" % (str(pc.type), pc)) + debug("@@ self.lo = 0x%x\n" % self.lo) + debug("@@ self.hi = 0x%x\n" % self.hi) + # check pc is in this heap's range + t("if not self.inrange(x):") + if not self.inrange(x): + return None + debug("@@ pc in range\n") + t("segments = 0") + segments = 0 + debug("@@ segmap_lo (%s) = 0x%x\n" % (str(self.segmap_lo.type), self.segmap_lo)) + debug("@@ self.lo = 0x%x \n" % self.lo) + debug("@@ self.log2_segment_size = 0x%x \n" % self.log2_segment_size) + t("offset = Types.as_long(pc - self.lo)") + offset = Types.as_long(pc - self.lo) + debug("@@ offset = 0x%x\n" % offset) + t("shift = self.log2_segment_size") + shift = self.log2_segment_size + debug("@@ shift = 0x%x\n" % shift) + t("segment = offset >> shift") + segment = offset >> shift + # segment = (offset >> self.log2_segment_size) + #segment = offset >> (self.log2_segment_size & 0x31) + debug("@@ segment = 0x%x\n" % segment) + t("tag = (self.segmap_lo + segment).dereference() & 0xff") + tag = (self.segmap_lo + segment).dereference() & 0xff + # tag = Types.load_byte(self.segmap_lo + segment) & 0xff + debug("@@ tag (%s) = 0x%x\n" % (str(tag.type), tag)) + t("while tag > 0 and segments < 64:") + while tag > 0 and segments < 64: + t("segment = segment - tag") + segment = segment - tag + debug("@@ segment = 0x%x\n" % segment) + t("tag = (self.segmap_lo + segment).dereference() & 0xff") + tag = (self.segmap_lo + segment).dereference() & 0xff + debug("@@ tag (%s) = 0x%x\n" % (str(tag.type), tag)) + t("segments += 1") + segments += 1 + t("if tag != 0:") + if tag != 0: + t("return None") + return None + debug("@@ lo = 0x%x\n" % self.lo) + debug("@@ segment << self.log2_segment_size = 0x%x\n" % (segment << self.log2_segment_size)) + t("block_addr = self.lo + (segment << self.log2_segment_size)") + block_addr = self.lo + (segment << self.log2_segment_size) + debug("@@ block_addr (%s) = 0x%x\n" % (str(block_addr.type), block_addr)) + t("heap_block = gdb.Value(block_addr).cast(CodeHeap.heap_block_type)") + heap_block = gdb.Value(block_addr).cast(CodeHeap.heap_block_type) + debug("@@ heap_block (%s) = 0x%x\n" % (str(heap_block.type), heap_block)) + t("if heap_block['_header']['_used'] != 1:") + if heap_block['_header']['_used'] != 1: + # hmm, this is not meant to happen + t("return None") + return None + t("blob = (heap_block + 1).cast(CodeHeap.code_blob_type)") + blob = (heap_block + 1).cast(CodeHeap.code_blob_type) + return blob + +# class encapsulating access to code cache memory +# this is essentially all static as per the JVM class + +class CodeCache: + # track whether we have successfully intiialized + class_inited = False + # static heap start, lo and hi bounds for code addresses + lo = 0 + hi = 0 + heap_count = 0 + heap_list = [] + + @classmethod + def class_init(cls): + t("CodeCache.class_init") + if cls.class_inited: + return + t("if cls.lo == 0 or cls.hi == 0:") + if cls.lo == 0 or cls.hi == 0: + try: + t("cls.lo = gdb.parse_and_eval(\"CodeCache::_low_bound\")") + lo = gdb.parse_and_eval("CodeCache::_low_bound") + cls.lo = Types.as_long(lo) + debug("@@ CodeCache::_low_bound = 0x%x\n" % cls.lo) + if cls.lo == 0: + return + t("cls.hi = gdb.parse_and_eval(\"CodeCache::_high_bound\")") + hi = gdb.parse_and_eval("CodeCache::_high_bound") + cls.hi = Types.as_long(hi) + debug("@@ CodeCache::_high_bound = 0x%x\n" % cls.hi) + if cls.hi == 0: + return + except Exception as arg: + debug("@@ %s\n" % arg) + cls.lo = 0 + cls.hi = 0 + cls.class_inited = False + raise + + t("f cls.heap_list == []:") + if cls.heap_list == []: + try: + t("heaps = gdb.parse_and_eval(\"CodeCache::_heaps\")") + heaps = gdb.parse_and_eval("CodeCache::_heaps") + debug("@@ CodeCache::_heaps (%s) = 0x%x\n" % (heaps.type, heaps)) + t("len = int(heaps['_len'])") + len = int(heaps['_len']) + debug("@@ CodeCache::_heaps->_len = %d\n" % len) + t("data = heaps['_data']") + data = heaps['_data'] + debug("@@ CodeCache::_heaps->_data = 0x%x\n" % data) + t("for i in range(0, len):") + for i in range(0, len): + t("heap = CodeHeap((data + i).dereference())") + heap = CodeHeap((data + i).dereference()) + t("cls.heap_list.append(heap)") + cls.heap_list.append(heap) + t("cls.heap_count += 1") + cls.heap_count += 1 + except Exception as arg: + debug("@@ %s\n" % arg) + cls.heap_list = [] + cls.heap_count = 0 + cls.class_inited = False + raise + cls.class_inited = True + + @classmethod + def inrange(cls, pc): + t("CodeCache.inrange") + # make sure we are initialized + cls.class_init() + # if we got here we can use the heaps + x = Types.as_long(pc) + t("return cls.lo <= x and cls.hi > x") + return cls.lo <= x and cls.hi > x + + @classmethod + def makestr(cls, charcnt, charptr): + t("CodeCache.makestr") + #res = "" + #for i in range(0, charcnt): + # c = (charptr + i).dereference() + # res = ("%s%c" % (res, c)) + #return res + debug("charcnt = %d charptr = %s\n" % (charcnt, str(charptr))) + return charptr.string("ascii", "ignore", charcnt) + + # given a PC find the associated OpenJDK code blob instance + @classmethod + def findblob(cls, pc): + t("CodeCache.findblob") + # make sure we are initialized + cls.class_init() + # if we got here we can use the heaps + if not cls.inrange(pc): + raise gdb.GdbError("dbg.findblob : address 0x%x is not in range!" % pc) + for heap in cls.heap_list: + try: + t("blob = heap.findblob(pc)") + blob = heap.findblob(pc) + except Exception as arg: + debug("@@ findblob excepted %s\n" % str(arg)) + t("blob = None") + blob = None + t("if blob != None:") + if blob != None: + t("name=str(blob['_name'])") + name=str(blob['_name']) + debug("@@ blob(0x%x) -> %s\n" % (pc, name)) + t("return blob") + return blob + t("raise gdb.GdbError") + raise gdb.GdbError("dbg.findblob : no blob for inrange address 0x%x!" % pc) + +# abstract over some constants for stack frame layout + +class FrameConstants(object): + class_inited = False + _sender_sp_offset = 0 + _interpreter_frame_sender_sp_offset = 0 + _interpreter_frame_method_offset = 0 + _interpreter_frame_bcp_offset = 0 + @classmethod + def class_init(cls): + if cls.class_inited: + return + cls._interpreter_frame_sender_sp_offset = int(gdb.parse_and_eval("frame::interpreter_frame_sender_sp_offset")) + cls._sender_sp_offset = int(gdb.parse_and_eval("frame::sender_sp_offset")) + cls._interpreter_frame_method_offset = int(gdb.parse_and_eval("frame::interpreter_frame_method_offset")) + cls._interpreter_frame_bcp_offset = int(gdb.parse_and_eval("frame::interpreter_frame_bcp_offset")) + # only set if we got here with no errors + cls.class_inited = True + @classmethod + def sender_sp_offset(cls): + cls.class_init() + return cls._sender_sp_offset + @classmethod + def interpreter_frame_sender_sp_offset(cls): + cls.class_init() + return cls._interpreter_frame_sender_sp_offset + @classmethod + def interpreter_frame_method_offset(cls): + cls.class_init() + return cls._interpreter_frame_method_offset + @classmethod + def interpreter_frame_bcp_offset(cls): + cls.class_init() + return cls._interpreter_frame_bcp_offset + +# class which knows how to read a compressed stream of bytes n.b. at +# the moment we only need to know how to read bytes and ints + +class CompressedStream: + # important constants for compressed stream read + BitsPerByte = 8 + lg_H = 6 + H = 1 << lg_H + L = (1 << BitsPerByte) - H + MAX_i = 4 + + def __init__(self, data): + # data is a gdb.Value of type 'byte *' + self.data = data + self.pos = 0 + # retrieve the byte at offset pos + def at(self, pos): + return int(Types.load_byte(self.data + pos)) + # read and return the next byte + def read(self): + t("CompressedStream.read()") + pos = self.pos + b = self.at(pos) + self.pos = pos+1 + return b + def read_int(self): + t("CompressedStream.read_int()") + b0 = self.read() + debug("b0 = 0x%x\n" % b0) + if b0 < CompressedStream.L: + return b0 + return self.read_int_mb(b0) + def read_signed_int(self): + t("CompressedStream.read_signed_int()") + return self.decode_sign(self.read_int()) + def decode_sign(self, x): + t("CompressedStream.decode_sign()") + return (x >> 1) ^ (0 - (x & 1)) + def read_int_mb(self, b): + t# ("CompressedStream.read_int_mb()") + sum = b + pos = self.pos + debug("pos = %d\n" % pos) + debug("sum = 0x%x\n" % sum) + lg_H_i = CompressedStream.lg_H + i = 0 + while (True): + b_i = self.at(pos + i) + debug("b_%d = %d\n" % (i, b_i)) + sum += (b_i << lg_H_i) + debug("sum = 0x%x\n" % sum) + i += 1 + if b_i < CompressedStream.L or i == CompressedStream.MAX_i: + self.pos = pos + i + debug("self.pos = %d\n" % self.pos) + return sum + lg_H_i += CompressedStream.lg_H + + +# class which knows how to find method and bytecode +# index pairs from a pc associated with a given compiled +# method. n.b. there may be more than one such pair +# because of inlining. + +class MethodBCIReader: + pcdescstar_t = None + class_inited = False + @classmethod + def class_init(cls): + t("MethodBCIReader.class_init") + if cls.class_inited: + return + # cache some useful types + cls.pcdesc_p = gdb.lookup_type("PcDesc").pointer() + cls.metadata_p = gdb.lookup_type("Metadata").pointer() + cls.metadata_pp = cls.metadata_p.pointer() + cls.method_p = gdb.lookup_type("Method").pointer() + cls.class_inited = True + + @classmethod + def as_pcdesc_p(cls, val): + return Types.to_type(val, cls.pcdesc_p) + + def __init__(self, nmethod, method): + t("MethodBCIReader.__init__") + # ensure we have cached the necessary types + self.class_init() + # need to unpack pc scopes + self.nmethod = nmethod + self.method = method + debug("nmethod (%s) = 0x%x\n" % (str(nmethod.type), Types.as_long(nmethod))) + blob = Types.to_type(nmethod, Types.codeblobp_t); + self.code_begin = Types.as_long(blob['_code_begin']) + self.code_end = Types.as_long(blob['_code_end']) + scopes_pcs_begin_offset = Types.as_int(nmethod['_scopes_pcs_offset']) + debug("scopes_pcs_begin_offset = 0x%x\n" % scopes_pcs_begin_offset) + scopes_pcs_end_offset = Types.as_int(nmethod['_dependencies_offset']) + debug("scopes_pcs_end_offset = 0x%x\n" % scopes_pcs_end_offset) + header_begin = Types.cast_bytep(nmethod) + self.scopes_pcs_begin = self.as_pcdesc_p(header_begin + scopes_pcs_begin_offset) + debug("scopes_pcs_begin (%s) = 0x%x\n" % (str(self.scopes_pcs_begin.type), Types.as_long(self.scopes_pcs_begin))) + self.scopes_pcs_end = self.as_pcdesc_p(header_begin + scopes_pcs_end_offset) + debug("scopes_pcs_end (%s) = 0x%x\n" % (str(self.scopes_pcs_end.type), Types.as_long(self.scopes_pcs_end))) + + def find_pc_desc(self, pc_off): + lower = self.scopes_pcs_begin + upper = self.scopes_pcs_end - 1 + if lower == upper: + return None + # non-empty table always starts with lower as a sentinel with + # offset -1 and will have at least one real offset beyond that + next = lower + 1 + while next < upper and next['_pc_offset'] <= pc_off: + next = next + 1 + # use the last known bci below this pc + return next - 1 + + def pc_desc_to_method_bci_stack(self, pc_desc): + scope_decode_offset = Types.as_int(pc_desc['_scope_decode_offset']) + if scope_decode_offset == 0: + return [ { 'method': self.method, 'bci': 0 } ] + nmethod = self.nmethod + debug("nmethod = 0x%x\n" % nmethod) + debug("pc_desc = 0x%x\n" % Types.as_long(pc_desc)) + base = Types.cast_bytep(nmethod) + # scopes_data_offset = Types.as_int(nmethod['_scopes_data_offset']) + # scopes_base = base + scopes_data_offset + scopes_base = nmethod['_scopes_data_begin'] + debug("scopes_base = 0x%x\n" % Types.as_long(scopes_base)) + metadata_offset = Types.as_int(nmethod['_metadata_offset']) + metadata_base = Types.to_type(base + metadata_offset, self.metadata_pp) + debug("metadata_base = 0x%x\n" % Types.as_long(metadata_base)) + scope = scopes_base + scope_decode_offset + debug("scope = 0x%x\n" % Types.as_long(scope)) + stream = CompressedStream(scope) + debug("stream = %s\n" % stream) + sender = stream.read_int() + debug("sender = %s\n" % sender) + # method name is actually in metadata + method_idx = stream.read_int() + method_md = (metadata_base + (method_idx - 1)).dereference() + methodptr = Types.to_type(method_md, self.method_p) + method = Method(methodptr) + # bci is offset by -1 to allow range [-1, ..., MAX_UINT) + bci = stream.read_int() - 1 + debug("method,bci = %s,0x%x\n" % (method.get_name(), bci)) + result = [ { 'method': method, 'bci': bci } ] + while sender > 0: + debug("\nsender = 0x%x\n" % sender) + stream = CompressedStream(scopes_base + sender) + sender = stream.read_int() + method_idx = stream.read_int() + method_md = (metadata_base + (method_idx - 1)).dereference() + methodptr = Types.to_type(method_md, self.method_p) + method = Method(methodptr) + # bci is offset by -1 to allow range [-1, ..., MAX_UINT) + bci = stream.read_int() - 1 + debug("method,bci = %s,0x%x\n" % (method.get_name(), bci)) + result.append( { 'method': method, 'bci': bci } ) + return result + + def pc_to_method_bci_stack(self, pc): + # need to search unpacked pc scopes + if pc < self.code_begin or pc >= self.code_end: + return None + pc_off = pc - self.code_begin + debug("\npc_off = 0x%x\n" % pc_off) + pc_desc = self.find_pc_desc(pc_off) + if pc_desc is None: + return None + return self.pc_desc_to_method_bci_stack(pc_desc) + +# class which knows how to read a method's line +# number table, translating bytecode indices to line numbers +class LineReader: + # table is a gdb.Value of type 'byte *' (strictly 'u_char *' in JVM code) + def __init__(self, table): + t("LineReader.init") + self.table = table + self.translations = {} + def bc_to_line(self, bci): + t("LineReader.bc_to_line()") + try: + return self.translations[bci] + except Exception as arg: + line = self.compute_line(bci) + if line >= 0: + self.translations[bci] = line + return line + def compute_line(self, bci): + t("LineReader.compute_line()") + debug("table = 0x%x\n" % self.table) + bestline = -1 + self.stream = CompressedStream(self.table) + self._bci = 0 + self._line = 0 + while self.read_pair(): + nextbci = self._bci + nextline = self._line + if nextbci >= bci: + return nextline + else: + bestline = nextline + return bestline + def read_pair(self): + t("LineReader.read_pair()") + next = self.stream.read() + debug("next = 0x%x\n" % next) + if next == 0: + return False + if next == 0xff: + self._bci = self._bci + self.stream.read_signed_int() + self._line = self._line + self.stream.read_signed_int() + else: + self._bci = self._bci + (next >> 3) + self._line = self._line + (next & 0x7) + debug("_bci = %d\n" % self._bci) + debug("_line = %d\n" % self._line) + return True + +# class to provide access to data relating to a Method object +class Method(object): + def __init__(self, methodptr): + self.methodptr = methodptr; + self.name = None + const_method = self.methodptr['_constMethod'] + bcbase = Types.cast_bytep(const_method + 1) + bytecode_size = Types.as_int(const_method['_code_size']) + lnbase = Types.cast_bytep(bcbase + bytecode_size) + self.line_number_reader = LineReader(lnbase) + + def get_name(self): + if self.name == None: + self.make_name(self.methodptr) + return self.name + + def get_klass_path(self): + if self.name == None: + self.make_name(self.methodptr) + return self.klass_path + + def get_line(self, bci): + if bci < 0: + bci = 0 + return self.line_number_reader.bc_to_line(bci) + + def make_name(self, methodptr): + const_method = methodptr['_constMethod'] + constant_pool = const_method['_constants'] + constant_pool_base = Types.cast_voidp((constant_pool + 1)) + klass_sym = constant_pool['_pool_holder']['_name'] + klass_name = klass_sym['_body'].cast(gdb.lookup_type("char").pointer()) + klass_name_length = int(klass_sym['_length']) + klass_path = CodeCache.makestr(klass_name_length, klass_name) + self.klass_str = klass_path.replace("/", ".") + dollaridx = klass_path.find('$') + if dollaridx >= 0: + klass_path = klass_path[0:dollaridx] + self.klass_path = klass_path + ".java" + method_idx = const_method['_name_index'] + method_sym = (constant_pool_base + (8 * method_idx)).cast(gdb.lookup_type("Symbol").pointer().pointer()).dereference() + method_name = method_sym['_body'].cast(gdb.lookup_type("char").pointer()) + method_name_length = int(method_sym['_length']) + self.method_str = CodeCache.makestr(method_name_length, method_name) + + sig_idx = const_method['_signature_index'] + sig_sym = (constant_pool_base + (8 * sig_idx)).cast(gdb.lookup_type("Symbol").pointer().pointer()).dereference() + sig_name = sig_sym['_body'].cast(gdb.lookup_type("char").pointer()) + sig_name_length = int(sig_sym['_length']) + sig_str = CodeCache.makestr(sig_name_length, sig_name) + self.sig_str = self.make_sig_str(sig_str) + self.name = self.klass_str + "." + self.method_str + self.sig_str + + def make_sig_str(self, sig): + in_sym_name = False + sig_str = "" + prefix="" + for i, c in enumerate(sig): + if c == "(": + sig_str = sig_str + c + elif c == ")": + # ignore return type + return sig_str + c + elif in_sym_name == True: + if c == ";": + in_sym_name = False + elif c == "/": + sig_str = sig_str + "." + else: + sig_str = sig_str + c + elif c == "L": + sig_str = sig_str + prefix + prefix = "," + in_sym_name = True + elif c == "B": + sig_str = sig_str + prefix + "byte" + prefix = "," + elif c == "S": + sig_str = sig_str + prefix + "short" + prefix = "," + elif c == "C": + sig_str = sig_str + prefix + "char" + prefix = "," + elif c == "I": + sig_str = sig_str + prefix + "int" + prefix = "," + elif c == "J": + sig_str = sig_str + prefix + "long" + prefix = "," + elif c == "F": + sig_str = sig_str + prefix + "float" + prefix = "," + elif c == "D": + sig_str = sig_str + prefix + "double" + prefix = "," + elif c == "Z": + sig_str = sig_str + prefix + "boolean" + prefix = "," + return sig_str + +# This represents a method in a JIT frame for the purposes of +# display. There may be more than one method associated with +# a (compiled) frame because of inlining. The MethodInfo object +# associated with a JIT frame creates a list of decorators. +# Interpreted and stub MethodInfo objects insert only one +# decorator. Compiled MethodInfo objects insert one for the +# base method and one for each inlined method found at the +# frame PC address. +class OpenJDKFrameDecorator(FrameDecorator): + def __init__(self, base, methodname, filename, line): + super(FrameDecorator, self).__init__(base) + self._base = base + self._methodname = methodname + self._filename = filename + self._line = line + + def function(self): + try: + t("OpenJDKFrameDecorator.function") + return self._methodname + except Exception as arg: + debug("!!! function oops !!! %s\n" % arg) + return None + + def method_name(self): + return self._methodname + + def filename(self): + try: + return self._filename + except Exception as arg: + debug("!!! filename oops !!! %s\n" % arg) + return None + + def line(self): + try: + return self._line + except Exception as arg: + debug("!!! line oops !!! %s\n" % arg) + return None + +# A frame filter for OpenJDK. +class OpenJDKFrameFilter(object): + def __init__(self, unwinder): + self.name="OpenJDK" + self.enabled = False + self.priority = 100 + self.unwinder = unwinder + self.unwinder.set_filter(self) + + def maybe_wrap_frame(self, frame): + t("OpenJDKFrameFilter.maybe_wrap_frame") + if self.unwinder is None: + return [ frame ] + t("unwindercache = self.unwinder.unwindercache") + unwindercache = self.unwinder.unwindercache + if unwindercache is None: + return [ frame ] + t("base = frame.inferior_frame()") + base = frame.inferior_frame() + t("sp = Types.as_long(base.read_register('rsp'))") + sp = base.read_register('rsp') + x = Types.as_long(sp) + debug("@@ get info at unwindercache[0x%x]\n" % x) + try: + cache_entry = unwindercache[x] + except Exception as arg: + debug("@@ unwindercache lookup excepted %s\n" % str(arg)) + # n.b. no such entry throws an exception + # just ignore and use existing frame + return [ frame ] + try: + if cache_entry is None: + debug("@@ lookup found no cache_entry\n") + return [ frame ] + elif cache_entry.codetype == "unknown": + debug("@@ lookup found unknown cache_entry\n") + return [ frame ] + else: + debug("@@ got cache_entry for blob 0x%x at unwindercache[0x%x]\n" % (cache_entry.blob, x)) + method_info = cache_entry.method_info + if method_info == None: + return [ frame ] + else: + return method_info.decorate(frame) + except Exception as arg: + warning("!!! maybe_wrap_frame oops !!! %s / %s\n" % (arg, traceback.format_exc())) + return [ frame ] + + def flatten(self, list_of_lists): + return iter([x for y in list_of_lists for x in y ]) + + def filter(self, frame_iter): + # return map(self.maybe_wrap_frame, frame_iter) + return self.flatten( map(self.maybe_wrap_frame, frame_iter) ) + + +# A frame id class, as specified by the gdb unwinder API. +class OpenJDKFrameId(object): + def __init__(self, sp, pc): + t("OpenJDKFrameId.__init__") + self.sp = sp + self.pc = pc + +# class hierarchy to record details of different code blobs +# the class implements functionality required by the frame decorator + +class MethodInfo(object): + def __init__(self, entry): + self.blob = entry.blob + self.pc = Types.as_long(entry.pc) + self.sp = Types.as_long(entry.sp) + if entry.bp is None: + self.bp = 0 + else: + self.bp = Types.as_long(entry.bp) + + def decorate(self, frame): + return [ frame ] + +# info for stub frame + +class StubMethodInfo(MethodInfo): + def __init__(self, entry, name): + super(StubMethodInfo, self).__init__(entry) + self.name = name + + def decorate(self, frame): + return [ OpenJDKFrameDecorator(frame, self.name, None, None) ] + +# common info for compiled, native or interpreted frame +class JavaMethodInfo(MethodInfo): + + def __init__(self, entry): + super(JavaMethodInfo, self).__init__(entry) + + def cache_method_info(self): + methodptr = self.get_methodptr() + self.method = Method(methodptr) + + + def get_method(self): + return self.method + + def method_name(self): + return self.get_method().get_name() + + def filename(self): + return self.get_method().get_klass_path() + + def decorate(self, frame): + return [ OpenJDKFrameDecorator(frame, self.method_name(), self.filename(), None) ] + +# info for compiled frame + +class CompiledMethodInfo(JavaMethodInfo): + + def __init__(self, entry): + t("CompiledMethodInfo.__init__") + super(CompiledMethodInfo,self).__init__(entry) + blob = self.blob + nmethod = Types.to_type(blob, Types.nmethodp_t) + self.methodptr = nmethod['_method'] + const_method = self.methodptr['_constMethod'] + bcbase = Types.cast_bytep(const_method + 1) + self.code_begin = Types.as_long(blob['_code_begin']) + # get bc and line number info from method + self.cache_method_info() + # get PC to BCI translator from the nmethod + self.bytecode_index_reader = MethodBCIReader(nmethod, self.method) + t("self.method_bci_stack = self.bytecode_index_reader.pc_to_method_bci_stack(self.pc)") + self.method_bci_stack = self.bytecode_index_reader.pc_to_method_bci_stack(self.pc) + + # subclasses need to compute their method pointer + + def get_methodptr(self): + return self.methodptr + + def format_method_name(self, method, is_outer): + name = method.get_name() + if is_outer: + return ("[compiled offset=0x%x] %s" % (self.pc - self.code_begin, name)) + else: + return ("[inlined] %s" % name) + + def make_decorator(self, frame, pair, is_outer): + t("make_decorator") + method = pair['method'] + bci = pair['bci'] + methodname = self.format_method_name(method, is_outer) + filename = method.get_klass_path() + line = method.get_line(bci) + if line < 0: + line = None + decorator = OpenJDKFrameDecorator(frame, methodname, filename, line) + return decorator + + def decorate(self, frame): + if self.method_bci_stack == None: + return [ frame ] + else: + try: + decorators = [] + pairs = self.method_bci_stack + debug("converting method_bci_stack = %s\n" % self.method_bci_stack) + l = len(pairs) + for i in range(l): + pair = pairs[i] + debug("decorating pair %s\n" % pair) + decorator = self.make_decorator(frame, pair, i == (l - 1)) + decorators.append(decorator) + return decorators + except Exception as arg: + debug("!!! decorate oops %s / %s !!!\n" % (arg, traceback.format_exc())) + return [ frame ] + +# info for native frame + +class NativeMethodInfo(JavaMethodInfo): + + def __init__(self, entry): + t("NativeMethodInfo.__init__") + super(NativeMethodInfo,self).__init__(entry) + blob = self.blob + nmethod = Types.to_type(blob, Types.nmethodp_t) + self.methodptr = nmethod['_method'] + self.code_begin = Types.as_long(blob['_code_begin']) + # get bc and line number info from method + self.cache_method_info() + + # subclasses need to compute their method pointer + + def get_methodptr(self): + return self.methodptr + + def format_method_name(self, method): + name = method.get_name() + return ("[native offset=0x%x] %s" % (self.pc - self.code_begin, name)) + + def method_name(self): + return self.format_method_name(self.method) + +# info for interpreted frame + +class InterpretedMethodInfo(JavaMethodInfo): + + def __init__(self, entry, bcp): + super(InterpretedMethodInfo,self).__init__(entry) + # interpreter frames store methodptr in slot 3 + methodptr_offset = FrameConstants.interpreter_frame_method_offset() * 8 + methodptr_addr = gdb.Value((self.bp + methodptr_offset) & 0xffffffffffffffff) + methodptr_slot = methodptr_addr.cast(gdb.lookup_type("Method").pointer().pointer()) + self.methodptr = methodptr_slot.dereference() + # bytecode immediately follows const method + const_method = self.methodptr['_constMethod'] + bcbase = Types.cast_bytep(const_method + 1) + debug("@@ bcbase = 0x%x\n" % Types.as_long(bcbase)) + bcp_offset = FrameConstants.interpreter_frame_bcp_offset() * 8 + if bcp is None: + # interpreter frames store bytecodeptr in slot 8 + bcp_addr = gdb.Value((self.bp + bcp_offset) & 0xffffffffffffffff) + bcp_val = Types.cast_bytep(Types.load_ptr(bcp_addr)) + else: + bcp_val = Types.cast_bytep(bcp) + # sanity check the register value -- it is sometimes off + # when returning from a call out + bcoff = Types.as_long(bcp_val - bcbase) + if bcoff < 0 or bcoff >= 0x10000: + # use the value in the frame slot + bcp_addr = gdb.Value((self.bp + bcp_offset) & 0xffffffffffffffff) + bcp_val = Types.cast_bytep(Types.load_ptr(bcp_addr)) + self.bcoff = Types.as_long(bcp_val - bcbase) + debug("@@ bcoff = 0x%x\n" % self.bcoff) + # line number table immediately following bytecode + bytecode_size = Types.as_int(const_method['_code_size']) + self.is_native = (bytecode_size == 0) + # n.b. data in compressed line_number_table block is u_char + debug("bytecode_size = 0x%x\n" % bytecode_size) + lnbase = Types.cast_bytep(bcbase + bytecode_size) + debug("lnbase = 0x%x\n" % Types.as_long(lnbase)) + self.line_number_reader = LineReader(lnbase) + self.cache_method_info() + + def get_methodptr(self): + return self.methodptr + + def format_method_name(self, method): + name = method.get_name() + if self.is_native: + return "[native] " + name + else: + return ("[interpreted: bc = %d] " % self.bcoff) + name + + def line(self): + line = self.line_number_reader.bc_to_line(self.bcoff) + debug("bc_to_line(%d) = %d\n" % (self.bcoff, line)) + if line < 0: + line = None + return line + + def decorate(self, frame): + method = self.get_method() + return [ OpenJDKFrameDecorator(frame, self.format_method_name(method), method.get_klass_path(), self.line()) ] + + +class OpenJDKUnwinderCacheEntry(object): + def __init__(self, blob, sp, pc, bp, bcp, name, codetype): + t("OpenJDKUnwinderCacheEntry.__init__") + self.blob = blob + self.sp = sp + self.pc = pc + self.bp = bp + self.codetype = codetype + try: + if codetype == "compiled": + self.method_info = CompiledMethodInfo(self) + elif codetype == "native": + self.method_info = NativeMethodInfo(self) + elif codetype == "interpreted": + self.method_info = InterpretedMethodInfo(self, bcp) + elif codetype == "stub": + self.method_info = StubMethodInfo(self, name) + else: + self.method_info = None + except Exception as arg: + debug("!!! failed to cache info for %s frame [pc: 0x%x sp:0x%x bp 0x%x] !!!\n!!! %s !!!\n" % (codetype, pc, sp, bp, arg)) + self.method_info = None + +# an unwinder class, an instance of which can be registered with gdb +# to handle unwinding of frames. + +class OpenJDKUnwinder(Unwinder): + def __init__(self): + t("OpenJDKUnwinder.__init__") + super(OpenJDKUnwinder, self).__init__("OpenJDKUnwinder") + # blob name will be in format '0xHexDigits "AlphaNumSpaces"' + self.matcher=re.compile('^0x[a-fA-F0-9]+ "(.*)"$') + self.unwindercache = {} + self.invocations = {} + + def set_filter(self, filter): + self.filter = filter + + @property + def enabled(self): + return self._enabled + + # Intercept when the user runs `enable/disable unwinder` + @enabled.setter + def enabled(self, value): + self._enabled = value + + if self.filter and value: + self.filter.enabled = value + + # the method that gets called by the pyuw_sniffer + def __call__(self, pending_frame): + # sometimes when we call into python gdb routines + # the call tries to re-establish the frame and ends + # up calling the frame sniffer recursively + # + # so use a list keyed by thread to avoid recursive calls + t("OpenJDKUnwinder.__call__") + thread = gdb.selected_thread() + if self.invocations.get(thread) != None: + debug("!!! blocked %s !!!\n" % str(thread)) + return None + try: + debug("!!! blocking %s !!!\n" % str(thread)) + self.invocations[thread] = thread + result = self.call_sub(pending_frame) + debug("!!! unblocking %s !!!\n" % str(thread)) + self.invocations[thread] = None + return result + except Exception as arg: + debug("!!! __call__ oops %s !!!\n" % arg) + debug("!!! unblocking %s !!!\n" % str(thread)) + self.invocations[thread] = None + return None + + def call_sub(self, pending_frame): + t("OpenJDKUnwinder.__call_sub__") + debug("@@ reading pending frame registers\n") + pc = pending_frame.read_register('rip') + debug("@@ pc = 0x%x\n" % Types.as_long(pc)) + sp = pending_frame.read_register('rsp') + debug("@@ sp = 0x%x\n" % Types.as_long(sp)) + bp = pending_frame.read_register('rbp') + debug("@@ bp = 0x%x\n" % Types.as_long(bp)) + try: + if not CodeCache.inrange(pc): + t("not CodeCache.inrange(0x%x)\n" % pc) + return None + except Exception as arg: + debug("@@ %s\n" % arg) + return None + if _dump_frame: + debug_write(" pc = 0x%x\n" % Types.as_long(pc)) + debug_write(" sp = 0x%x\n" % Types.as_long(sp)) + debug_write(" bp = 0x%x\n" % Types.as_long(bp)) + # this is a Java frame so we need to return unwind info + # + # the interpreter keeps the bytecode pointer (bcp) in a + # register and saves it to the stack when it makes a call to + # another Java method or to C++. if the current frame has a + # bcp register value then we pass it in case the pending frame + # is an intrepreter frame. that ensures we use the most up to + # date bcp when the inferior has stopped at the top level in a + # Java interpreted frame. it also saves us doing a redundant + # stack read when the pending frame sits below a non-JITted + # (C++) frame. n.b. if the current frame is a JITted frame + # (i.e. one that we have already unwound) then rbp will not be + # present. that's ok because the frame decorator can still + # find the latest bcp value on the stack. + bcp = pending_frame.read_register('r13') + try: + # convert returned value to a python int to force a check that + # the register is defined. if not this will except + bcp = gdb.Value(int(bcp)) + debug("@@ bcp = 0x%x\n" % Types.as_long(bcp)) + except Exception as arg: + debug("@@ !!! call_sub oops %s !!! \n" % arg) + bcp = None + debug("@@ bcp = None\n") + t("blob = CodeCache.findblob(pc)") + blob = CodeCache.findblob(pc) + t("if blob is None:") + if blob is None: + t("return None") + return None + # if the blob is an nmethod then we use the frame + # size to identify the frame base otherwise we + # use the value in rbp + t("name = str(blob['_name'])") + name = str(blob['_name']) + # blob name will be in format '0xHexDigits "AlphaNumSpaces"' + # and we just want the bit between the quotes + m = self.matcher.match(name) + if not m is None: + debug("@@ m.group(1) == %s\n" % m.group(1)) + name = m.group(1) + if name == "nmethod": + debug("@@ compiled %s\n" % name) + codetype = 'compiled' + # TODO -- need to check if frame is complete + # i.e. if ((char *)pc - (char *)blob) > blob['_code_begin'] + blob['_frame_complete_offset'] + # if not then we have not pushed a frame. + # what do we do then? use SP as BP??? + frame_size = blob['_frame_size'] + debug("@@ frame_size = 0x%x\n" % int(frame_size)) + # n.b. frame_size includes stacked rbp and rip hence the -2 + bp = sp + ((frame_size - 2) * 8) + debug("@@ revised bp = 0x%x\n" % Types.as_long(bp)) + elif name == "native nmethod": + debug("@@ native %s \n" % name) + codetype = "native" + elif name == "Interpreter": + debug("@@ interpreted %s\n" %name) + codetype = "interpreted" + elif name[:4] == "Stub": + debug("@@ stub %s\n" % name) + codetype = "stub" + else: + debug("@@ unknown %s\n" % name) + codetype = "unknown" + # cache details of the current frame + x = Types.as_long(sp) + debug("@@ add %s cache entry for blob 0x%x at unwindercache[0x%x]\n" % (codetype, blob, x)) + self.unwindercache[x] = OpenJDKUnwinderCacheEntry(blob, sp, pc, bp, bcp, name, codetype) + t("next_bp = Types.load_long(bp)") + next_bp = Types.load_long(bp) + t("next_pc = Types.load_long(bp + 8)") + next_pc = Types.load_long(bp + 8) + # next_sp is normally just 2 words below current bp + # but for interpreted frames we need to skip locals + # so we pull caller_sp from the frame + if codetype == "interpreted": + interpreter_frame_sender_sp_offset = FrameConstants.interpreter_frame_sender_sp_offset() * 8 + # interpreter frames store sender sp in slot 1 + next_sp = Types.load_long(bp + interpreter_frame_sender_sp_offset) + else: + sender_sp_offset = FrameConstants.sender_sp_offset() * 8 + next_sp = bp + sender_sp_offset + # create unwind info for this frame + t("frameid = OpenJDKFrameId(...)") + frameid = OpenJDKFrameId(Types.to_voidp(next_sp), + Types.to_type(next_pc, pc.type)) + debug("@@ created frame id\n") + t("unwind_info = pending_frame.create_unwind_info(frameid)") + unwind_info = pending_frame.create_unwind_info(frameid) + debug("@@ created unwind info\n") + debug("@@ next_bp = 0x%x\n" % next_bp) + debug("@@ next_pc = 0x%x\n" % next_pc) + debug("@@ next_sp = 0x%x\n" % next_sp) + # we must calculate pc, sp and bp. + # + # for now we only add the minimum of registers that we know + # are valid. + unwind_info.add_saved_register('rip', next_pc) + unwind_info.add_saved_register('rsp', next_sp) + unwind_info.add_saved_register('rbp', next_bp) + if _dump_frame: + debug_write("next pc = 0x%x\n" % Types.as_long(next_pc)) + debug_write("next sp = 0x%x\n" % Types.as_long(next_sp)) + debug_write("next bp = 0x%x\n" % Types.as_long(next_bp)) + t("return unwind_info") + return unwind_info + +# register the unwinder globally [probably really needs to be +# registered solely with libjvm.so] +def register_unwinder(): + try: + unwinder = None + if _have_unwinder: + unwinder = OpenJDKUnwinder() + gdb.unwinder.register_unwinder(None, unwinder, replace=True) + filt = OpenJDKFrameFilter(unwinder) + gdb.frame_filters[filt.name] = filt + except Exception as arg: + traceback.format_exc() + debug("!!! register_unwinder failed %s / %s !!!\n" % (arg, traceback.format_exc())) + gdb.write("Failed to register OpenJDK unwinder and frame filter: %s\n" % arg) + gdb.write("Is openjdk-*-dbg package installed?\n") + +register_unwinder() diff --git a/font.properties.ja b/font.properties.ja new file mode 100644 index 000000000..91916715f --- /dev/null +++ b/font.properties.ja @@ -0,0 +1,197 @@ +# @(#)font.properties.ja.linux 1.7 02/03/07 +# +# Copyright 2002 Sun Microsystems, Inc. All rights reserved. +# + +# Component Font Mappings +# +serif.0=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1 +serif.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +serif.italic.0=-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1 +serif.italic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +serif.bold.0=-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1 +serif.bold.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +serif.bolditalic.0=-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1 +serif.bolditalic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.italic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.bold.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.bolditalic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.italic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.bold.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.bolditalic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.italic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.bold.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.bolditalic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.italic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.bold.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.bolditalic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +# Missing Glyph Character +# +default.char=274f + +# Component Font Character Encodings +# +fontcharset.serif.0=sun.io.CharToByteISO8859_1 +fontcharset.serif.1=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.sansserif.0=sun.io.CharToByteISO8859_1 +fontcharset.sansserif.1=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.monospaced.0=sun.io.CharToByteISO8859_1 +fontcharset.monospaced.1=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.dialog.0=sun.io.CharToByteISO8859_1 +fontcharset.dialog.1=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1 +fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11JIS0208 + +# Exclusion Ranges +# + +# XFontSet Information +# +fontset.serif.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.serif.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.serif.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.serif.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.default=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 diff --git a/font.properties.ja.wqy_zenhai b/font.properties.ja.wqy_zenhai new file mode 100644 index 000000000..119822d83 --- /dev/null +++ b/font.properties.ja.wqy_zenhai @@ -0,0 +1,244 @@ +# @(#)font.properties.ja.linux 1.7 02/03/07 +# +# Copyright 2002 Sun Microsystems, Inc. All rights reserved. +# + +# Component Font Mappings +# +serif.0=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1 +serif.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +serif.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +serif.italic.0=-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1 +serif.italic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +serif.italic.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +serif.bold.0=-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1 +serif.bold.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +serif.bold.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +serif.bolditalic.0=-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1 +serif.bolditalic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +serif.bolditalic.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +sansserif.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.italic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +sansserif.italic.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.bold.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +sansserif.bold.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +sansserif.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +sansserif.bolditalic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +sansserif.bolditalic.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +monospaced.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.italic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +monospaced.italic.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.bold.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +monospaced.bold.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +monospaced.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +monospaced.bolditalic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +monospaced.bolditalic.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialog.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.italic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialog.italic.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.bold.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialog.bold.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialog.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1 +dialog.bolditalic.1=-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialog.bolditalic.2=-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialoginput.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.italic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialoginput.italic.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.bold.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialoginput.bold.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +dialoginput.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1 +dialoginput.bolditalic.1=-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 +dialoginput.bolditalic.2=-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +# Missing Glyph Character +# +default.char=274f + +# Component Font Character Encodings +# +fontcharset.serif.0=sun.io.CharToByteISO8859_1 +fontcharset.serif.1=sun.awt.motif.CharToByteX11JIS0208 +fontcharset.serif.2=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.sansserif.0=sun.io.CharToByteISO8859_1 +fontcharset.sansserif.1=sun.awt.motif.CharToByteX11JIS0208 +fontcharset.sansserif.2=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.monospaced.0=sun.io.CharToByteISO8859_1 +fontcharset.monospaced.1=sun.awt.motif.CharToByteX11JIS0208 +fontcharset.monospaced.2=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.dialog.0=sun.io.CharToByteISO8859_1 +fontcharset.dialog.1=sun.awt.motif.CharToByteX11JIS0208 +fontcharset.dialog.2=sun.awt.motif.CharToByteX11JIS0208 + +fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1 +fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11JIS0208 +fontcharset.dialoginput.2=sun.awt.motif.CharToByteX11JIS0208 + +# Exclusion Ranges +# + +# XFontSet Information +# +fontset.serif.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.serif.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.serif.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.serif.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.sansserif.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.monospaced.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialog.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-gothic-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.italic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.bold=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.bolditalic=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.dialoginput.plain=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + +fontset.default=\ +-sony-fixed-medium-r-normal--*-%d-*-*-c-*-jisx0201.1976-0,\ +-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\ +-kochi-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0,\ +-sazanami-mincho-medium-r-normal--*-%d-*-*-c-*-jisx0208.1983-0 + diff --git a/generate-debian-orig.sh b/generate-debian-orig.sh new file mode 100644 index 000000000..9ee8ac31d --- /dev/null +++ b/generate-debian-orig.sh @@ -0,0 +1,68 @@ +#!/bin/sh + +tarballs="corba.tar.gz hotspot.tar.gz jaxp.tar.gz jaxws.tar.gz jdk.tar.gz langtools.tar.gz openjdk.tar.gz" +# AArch64 hotspot +aarch64_hsname=f50993b6c38d +tarballs="$tarballs $aarch64_hsname.tar.gz" +jamvmtb=jamvm-ac22c9948434e528ece451642b4ebde40953ee7e.tar.gz +tarballdir=7u55 +version=7u55-2.4.7 +base=openjdk-7 +pkgdir=$base-$version +origtar=${base}_${version}.orig.tar.gz + +icedtea_checkout=icedtea7-2.4.7 +debian_checkout=openjdk7 + +if [ -d $pkgdir ]; then + echo directory $pkgdir already exists + exit 1 +fi + +if [ -d $pkgdir.orig ]; then + echo directory $pkgdir.orig already exists + exit 1 +fi + +if [ -f $origtar ]; then + echo "Using existing $origtar" + tar xf $origtar + if [ -d $pkgdir.orig ]; then + mv $pkgdir.orig $pkgdir + fi + tar -c -f - -C $icedtea_checkout . | tar -x -f - -C $pkgdir + rm -rf $pkgdir/.hg +else + echo "Creating new $pkgdir.orig/" + rm -rf $pkgdir.orig + mkdir -p $pkgdir.orig + case "$base" in + openjdk*) + for i in $tarballs; do + cp -p $tarballdir/$i $pkgdir.orig/ + done + cp -p $tarballdir/$jamvmtb $pkgdir.orig/ + ;; + esac + tar -c -f - -C $icedtea_checkout . | tar -x -f - -C $pkgdir.orig + ( + cd $pkgdir.orig + sh autogen.sh + rm -rf autom4te.cache + ) + cp -a $pkgdir.orig $pkgdir + rm -rf $pkgdir.orig/.hg +fi + +echo "Build debian diff in $pkgdir/" +cp -a $debian_checkout $pkgdir/debian +( + cd $pkgdir + #bash debian/update-shasum.sh + #bash debian/update-hgrev.sh + ls + patch -p1 < debian/patches/icedtea-patch.diff + sh autogen.sh + rm -rf autom4te.cache + echo "aarch64 http://openjdk.linaro.org/hotspot $aarch64_hsname $(sha256sum $aarch64_hsname.tar.gz) $aarch64_hsname.tar.gz" >> hotspot.map +) diff --git a/generate-dfsg-zip.sh b/generate-dfsg-zip.sh new file mode 100644 index 000000000..200be9485 --- /dev/null +++ b/generate-dfsg-zip.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +if [ ! -f "$1" ]; then + echo "does not exist: $1" + exit 1 +fi + +jdkdir=$(tar tf $1 | head -1 | sed 's,/.*,,') +echo $jdkdir + +dist=$(lsb_release -is) + +echo "not needed anymore. 2.4.4 has both jdk and langtools cleaned up" +exit 1 + +# Untar openjdk source zip. +rm -rf openjdk +case "$1" in + *.zip) unzip -q -x $1 ;; + *.tar*) tar xf $1;; +esac + +case "$1" in + *jdk*) + echo "Cleanup jdk tarball..." + # Remove J2DBench sources, some of which have questionable license + # headers. + rm -rf \ + $jdkdir/src/share/demo/java2d/J2DBench + + # binary files + rm -f \ + $jdkdir/test/sun/net/idn/*.spp + + rm -rf \ + $jdkdir/test/sun/security/pkcs11/nss/lib/* + + rm -f \ + $jdkdir/test/java/util/Locale/data/deflocale.sh \ + $jdkdir/test/java/util/Locale/data/deflocale.rhel5 \ + $jdkdir/test/java/util/Locale/data/deflocale.rhel5.fmtasdefault \ + $jdkdir/test/java/util/Locale/data/deflocale.sol10.fmtasdefault \ + $jdkdir/test/java/util/Locale/data/deflocale.win7 \ + $jdkdir/test/java/util/Locale/data/deflocale.win7.fmtasdefault +;; + + *langtools*) + echo "Cleanup langtools tarball..." + rm -rf $jdkdir/test/tools/javac/T5090006/broken.jar +;; + +esac + +# Create new zip with new name. + +NEW_ZIP=$(echo $1 | sed -e 's/\.tar.gz/-dfsg.tar.gz/;s/\.zip/-dfsg.tar.gz/') +GZIP=-9v tar -cz -f $NEW_ZIP $jdkdir + +# Remove old unzipped openjdk dir. +rm -rf $jdkdir diff --git a/jvm.cfg-default b/jvm.cfg-default new file mode 100644 index 000000000..d886ba82a --- /dev/null +++ b/jvm.cfg-default @@ -0,0 +1,5 @@ +# jvm.cfg-default - default jvm configuration which is used if no jvm.cfg +# is found. After unpacking the file jvm.cfg doesn't exist yet (config file), +# in this case use this file instead, so that the VM can be used before +# configuration of the runtime package. +-server KNOWN diff --git a/man/jar.1 b/man/jar.1 new file mode 100644 index 000000000..8492a8489 --- /dev/null +++ b/man/jar.1 @@ -0,0 +1,364 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JAR" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jar \- create an archive for classes and resources, and manipulate or +restore individual classes or resources from an archive +.SH SYNOPSIS +\f[CR]jar\f[R] [\f[I]OPTION\f[R] ...] +[ [\f[CR]\-\-release\f[R] \f[I]VERSION\f[R]] [\f[CR]\-C\f[R] +\f[I]dir\f[R]] \f[I]files\f[R]] ... +.SH DESCRIPTION +The \f[CR]jar\f[R] command is a general\-purpose archiving and +compression tool, based on the ZIP and ZLIB compression formats. +Initially, the \f[CR]jar\f[R] command was designed to package Java +applets (not supported since JDK 11) or applications; however, beginning +with JDK 9, users can use the \f[CR]jar\f[R] command to create modular +JARs. +For transportation and deployment, it\(aqs usually more convenient to +package modules as modular JARs. +.PP +The syntax for the \f[CR]jar\f[R] command resembles the syntax for the +\f[CR]tar\f[R] command. +It has several main operation modes, defined by one of the mandatory +operation arguments. +Other arguments are either options that modify the behavior of the +operation or are required to perform the operation. +.PP +When modules or the components of an application (files, images and +sounds) are combined into a single archive, they can be downloaded by a +Java agent (such as a browser) in a single HTTP transaction, rather than +requiring a new connection for each piece. +This dramatically improves download times. +The \f[CR]jar\f[R] command also compresses files, which further improves +download time. +The \f[CR]jar\f[R] command also enables individual entries in a file to +be signed so that their origin can be authenticated. +A JAR file can be used as a class path entry, whether or not it\(aqs +compressed. +.PP +An archive becomes a modular JAR when you include a module descriptor, +\f[CR]module\-info.class\f[R], in the root of the given directories or +in the root of the \f[CR].jar\f[R] archive. +The following operations described in \f[B]Operation Modifiers Valid +Only in Create and Update Modes\f[R] are valid only when creating or +updating a modular jar or updating an existing non\-modular jar: +.IP \(bu 2 +\f[CR]\-\-module\-version\f[R] +.IP \(bu 2 +\f[CR]\-\-hash\-modules\f[R] +.IP \(bu 2 +\f[CR]\-\-module\-path\f[R] +.PP +\f[B]Note:\f[R] +.PP +All mandatory or optional arguments for long options are also mandatory +or optional for any corresponding short options. +.SH MAIN OPERATION MODES +When using the \f[CR]jar\f[R] command, you must specify the operation +for it to perform. +You specify the operation mode for the \f[CR]jar\f[R] command by +including the appropriate operation arguments described in this section. +You can mix an operation argument with other one\-letter options. +Generally the operation argument is the first argument specified on the +command line. +.TP +\f[CR]\-c\f[R] or \f[CR]\-\-create\f[R] +Creates the archive. +.TP +\f[CR]\-i\f[R] \f[I]FILE\f[R] or \f[CR]\-\-generate\-index=\f[R]\f[I]FILE\f[R] +Generates index information for the specified JAR file. +This option is deprecated and may be removed in a future release. +.TP +\f[CR]\-t\f[R] or \f[CR]\-\-list\f[R] +Lists the table of contents for the archive. +.TP +\f[CR]\-u\f[R] or \f[CR]\-\-update\f[R] +Updates an existing JAR file. +.TP +\f[CR]\-x\f[R] or \f[CR]\-\-extract\f[R] +Extracts the named (or all) files from the archive. +If a file with the same name appears more than once in the archive, each +copy will be extracted, with later copies overwriting (replacing) +earlier copies unless \-k is specified. +.TP +\f[CR]\-d\f[R] or \f[CR]\-\-describe\-module\f[R] +Prints the module descriptor or automatic module name. +.TP +\f[CR]\-\-validate\f[R] +Validate the contents of the JAR file. +See \f[CR]Integrity of a JAR File\f[R] section below for more details. +.SH OPERATION MODIFIERS VALID IN ANY MODE +You can use the following options to customize the actions of any +operation mode included in the \f[CR]jar\f[R] command. +.TP +\f[CR]\-C\f[R] \f[I]DIR\f[R] +When used with the create operation mode, changes the specified +directory and includes the \f[I]files\f[R] specified at the end of the +command line. +.RS +\f[CR]jar\f[R] [\f[I]OPTION\f[R] ...] +[ [\f[CR]\-\-release\f[R] \f[I]VERSION\f[R]] [\f[CR]\-C\f[R] +\f[I]dir\f[R]] \f[I]files\f[R]] +When used with the extract operation mode, specifies the destination +directory where the JAR file will be extracted. +Unlike with the create operation mode, this option can be specified only +once with the extract operation mode. +.RE +.TP +\f[CR]\-f\f[R] \f[I]FILE\f[R] or \f[CR]\-\-file=\f[R]\f[I]FILE\f[R] +Specifies the archive file name. +.TP +\f[CR]\-\-release\f[R] \f[I]VERSION\f[R] +Creates a multirelease JAR file. +Places all files specified after the option into a versioned directory +of the JAR file named +\f[CR]META\-INF/versions/\f[R]\f[I]VERSION\f[R]\f[CR]/\f[R], where +\f[I]VERSION\f[R] must be must be a positive integer whose value is 9 or +greater. +.RS +At run time, where more than one version of a class exists in the JAR, +the JDK will use the first one it finds, searching initially in the +directory tree whose \f[I]VERSION\f[R] number matches the JDK\(aqs major +version number. +It will then look in directories with successively lower +\f[I]VERSION\f[R] numbers, and finally look in the root of the JAR. +.RE +.TP +\f[CR]\-v\f[R] or \f[CR]\-\-verbose\f[R] +Sends or prints verbose output to standard output. +.SH OPERATION MODIFIERS VALID ONLY IN CREATE AND UPDATE MODES +You can use the following options to customize the actions of the create +and the update main operation modes: +.TP +\f[CR]\-e\f[R] \f[I]CLASSNAME\f[R] or \f[CR]\-\-main\-class=\f[R]\f[I]CLASSNAME\f[R] +Specifies the application entry point for standalone applications +bundled into a modular or executable modular JAR file. +.TP +\f[CR]\-m\f[R] \f[I]FILE\f[R] or \f[CR]\-\-manifest=\f[R]\f[I]FILE\f[R] +Includes the manifest information from the given manifest file. +.TP +\f[CR]\-M\f[R] or \f[CR]\-\-no\-manifest\f[R] +Doesn\(aqt create a manifest file for the entries. +.TP +\f[CR]\-\-module\-version=\f[R]\f[I]VERSION\f[R] +Specifies the module version, when creating or updating a modular JAR +file, or updating a non\-modular JAR file. +.TP +\f[CR]\-\-hash\-modules=\f[R]\f[I]PATTERN\f[R] +Computes and records the hashes of modules matched by the given pattern +and that depend upon directly or indirectly on a modular JAR file being +created or a non\-modular JAR file being updated. +.TP +\f[CR]\-p\f[R] or \f[CR]\-\-module\-path\f[R] +Specifies the location of module dependence for generating the hash. +.TP +\f[CR]\(at\f[R]\f[I]file\f[R] +Reads \f[CR]jar\f[R] options and file names from a text file as if they +were supplied on the command line +.SH OPERATION MODIFIERS VALID ONLY IN CREATE, UPDATE, AND GENERATE\-INDEX MODES +You can use the following options to customize the actions of the create +(\f[CR]\-c\f[R] or \f[CR]\-\-create\f[R]) the update (\f[CR]\-u\f[R] or +\f[CR]\-\-update\f[R] ) and the generate\-index (\f[CR]\-i\f[R] or +\f[CR]\-\-generate\-index=\f[R]\f[I]FILE\f[R]) main operation modes: +.TP +\f[CR]\-0\f[R] or \f[CR]\-\-no\-compress\f[R] +Stores without using ZIP compression. +.TP +\f[CR]\-\-date=\f[R]\f[I]TIMESTAMP\f[R] +The timestamp in ISO\-8601 extended offset date\-time with optional +time\-zone format, to use for the timestamp of the entries, e.g. +\(dq2022\-02\-12T12:30:00\-05:00\(dq. +.SH OPERATION MODIFIERS VALID ONLY IN EXTRACT MODE +.TP +\f[CR]\-\-dir\f[R] \f[I]DIR\f[R] +Directory into which the JAR file will be extracted. +.TP +\f[CR]\-k\f[R] or \f[CR]\-\-keep\-old\-files\f[R] +Do not overwrite existing files. +If a Jar file entry with the same name exists in the target directory, +the existing file will not be overwritten. +As a result, if a file appears more than once in an archive, later +copies will not overwrite earlier copies. +Also note that some file system can be case insensitive. +.SH OTHER OPTIONS +The following options are recognized by the \f[CR]jar\f[R] command and +not used with operation modes: +.TP +\f[CR]\-h\f[R] or \f[CR]\-\-help\f[R][\f[CR]:compat\f[R]] +Displays the command\-line help for the \f[CR]jar\f[R] command or +optionally the compatibility help. +.TP +\f[CR]\-\-help\-extra\f[R] +Displays help on extra options. +.TP +\f[CR]\-\-version\f[R] +Prints the program version. +.SH INTEGRITY OF A JAR FILE +As a JAR file is based on ZIP format, it is possible to create a JAR +file using tools other than the \f[CR]jar\f[R] command. +The \-\-validate option may be used to perform the following integrity +checks against a JAR file: +.IP \(bu 2 +That there are no duplicate Zip entry file names +.IP \(bu 2 +Verify that the Zip entry file name: +.RS 2 +.IP \(bu 2 +is not an absolute path +.IP \(bu 2 +the file name is not \(aq.\(aq or \(aq..\(aq +.IP \(bu 2 +does not contain a backslash, \(aq\(rs\(aq +.IP \(bu 2 +does not contain a drive letter +.IP \(bu 2 +path element does not include \(aq.\(aq or \(aq.. +.RE +.IP \(bu 2 +The API exported by a multi\-release jar archive is consistent across +all different release versions. +.PP +The jar tool exits with a status of 0 if there were no integrity issues +encountered and >0 if an error/warning occurred. +.PP +When an integrity issue is reported, it will often require that the JAR +file is re\-created by the original source of the JAR file. +.SH EXAMPLES OF JAR COMMAND SYNTAX +.IP \(bu 2 +Create an archive, \f[CR]classes.jar\f[R], that contains two class +files, \f[CR]Foo.class\f[R] and \f[CR]Bar.class\f[R]. +.RS 2 +.RS +.PP +\f[CR]jar \-\-create \-\-file classes.jar Foo.class Bar.class\f[R] +.RE +.RE +.IP \(bu 2 +Create an archive, \f[CR]classes.jar\f[R], that contains two class +files, \f[CR]Foo.class\f[R] and \f[CR]Bar.class\f[R] setting the last +modified date and time to \f[CR]2021 Jan 6 12:36:00\f[R]. +.RS 2 +.RS +.PP +\f[CR]jar \-\-create \-\-date=\(dq2021\-01\-06T14:36:00+02:00\(dq \-\-file=classes.jar Foo.class Bar.class\f[R] +.RE +.RE +.IP \(bu 2 +Create an archive, \f[CR]classes.jar\f[R], by using an existing +manifest, \f[CR]mymanifest\f[R], that contains all of the files in the +directory \f[CR]foo/\f[R]. +.RS 2 +.RS +.PP +\f[CR]jar \-\-create \-\-file classes.jar \-\-manifest mymanifest \-C foo/\f[R] +.RE +.RE +.IP \(bu 2 +Create a modular JAR archive,\f[CR]foo.jar\f[R], where the module +descriptor is located in \f[CR]classes/module\-info.class\f[R]. +.RS 2 +.RS +.PP +\f[CR]jar \-\-create \-\-file foo.jar \-\-main\-class com.foo.Main \-\-module\-version 1.0 \-C foo/classes resources\f[R] +.RE +.RE +.IP \(bu 2 +Update an existing non\-modular JAR, \f[CR]foo.jar\f[R], to a modular +JAR file. +.RS 2 +.RS +.PP +\f[CR]jar \-\-update \-\-file foo.jar \-\-main\-class com.foo.Main \-\-module\-version 1.0 \-C foo/module\-info.class\f[R] +.RE +.RE +.IP \(bu 2 +Create a versioned or multi\-release JAR, \f[CR]foo.jar\f[R], that +places the files in the \f[CR]classes\f[R] directory at the root of the +JAR, and the files in the \f[CR]classes\-10\f[R] directory in the +\f[CR]META\-INF/versions/10\f[R] directory of the JAR. +.RS 2 +.PP +In this example, the \f[CR]classes/com/foo\f[R] directory contains two +classes, \f[CR]com.foo.Hello\f[R] (the entry point class) and +\f[CR]com.foo.NameProvider\f[R], both compiled for JDK 8. +The \f[CR]classes\-10/com/foo\f[R] directory contains a different +version of the \f[CR]com.foo.NameProvider\f[R] class, this one +containing JDK 10 specific code and compiled for JDK 10. +.PP +Given this setup, create a multirelease JAR file \f[CR]foo.jar\f[R] by +running the following command from the directory containing the +directories \f[CR]classes\f[R] and \f[CR]classes\-10\f[R] . +.RS +.PP +\f[CR]jar \-\-create \-\-file foo.jar \-\-main\-class com.foo.Hello \-C classes . \-\-release 10 \-C classes\-10 .\f[R] +.RE +.PP +The JAR file \f[CR]foo.jar\f[R] now contains: +.IP +.EX +% jar \-tf foo.jar + +META\-INF/ +META\-INF/MANIFEST.MF +com/ +com/foo/ +com/foo/Hello.class +com/foo/NameProvider.class +META\-INF/versions/10/com/ +META\-INF/versions/10/com/foo/ +META\-INF/versions/10/com/foo/NameProvider.class +.EE +.PP +As well as other information, the file \f[CR]META\-INF/MANIFEST.MF\f[R], +will contain the following lines to indicate that this is a multirelease +JAR file with an entry point of \f[CR]com.foo.Hello\f[R]. +.IP +.EX +\&... +Main\-Class: com.foo.Hello +Multi\-Release: true +.EE +.PP +Assuming that the \f[CR]com.foo.Hello\f[R] class calls a method on the +\f[CR]com.foo.NameProvider\f[R] class, running the program using JDK 10 +will ensure that the \f[CR]com.foo.NameProvider\f[R] class is the one in +\f[CR]META\-INF/versions/10/com/foo/\f[R]. +Running the program using JDK 8 will ensure that the +\f[CR]com.foo.NameProvider\f[R] class is the one at the root of the JAR, +in \f[CR]com/foo\f[R]. +.RE +.IP \(bu 2 +Create an archive, \f[CR]my.jar\f[R], by reading options and lists of +class files from the file \f[CR]classes.list\f[R]. +.RS 2 +.PP +\f[B]Note:\f[R] +.PP +To shorten or simplify the \f[CR]jar\f[R] command, you can provide an +arg file that lists the files to include in the JAR file and pass it to +the \f[CR]jar\f[R] command with the at sign (\f[CR]\(at\f[R]) as a +prefix. +.RS +.PP +\f[CR]jar \-\-create \-\-file my.jar \(atclasses.list\f[R] +.RE +.PP +If one or more entries in the arg file cannot be found then the jar +command fails without creating the JAR file. +.RE +.IP \(bu 2 +Extract the JAR file \f[CR]foo.jar\f[R] to \f[CR]/tmp/bar/\f[R] +directory: +.RS 2 +.RS +.PP +\f[CR]jar \-xf foo.jar \-C /tmp/bar/\f[R] +.RE +.PP +Alternatively, you can also do: +.RS +.PP +\f[CR]jar \-\-extract \-\-file foo.jar \-\-dir /tmp/bar/\f[R] +.RE +.RE diff --git a/man/jarsigner.1 b/man/jarsigner.1 new file mode 100644 index 000000000..65797f417 --- /dev/null +++ b/man/jarsigner.1 @@ -0,0 +1,1311 @@ +'\" t +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JARSIGNER" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jarsigner \- sign and verify Java Archive (JAR) files +.SH SYNOPSIS +\f[CR]jarsigner\f[R] [\f[I]options\f[R]] \f[I]jar\-file\f[R] +\f[I]alias\f[R] +.PP +\f[CR]jarsigner\f[R] \f[CR]\-verify\f[R] [\f[I]options\f[R]] +\f[I]jar\-file\f[R] [\f[I]alias\f[R] ...] +.PP +\f[CR]jarsigner\f[R] \f[CR]\-version\f[R] +.TP +\f[I]options\f[R] +The command\-line options. +See \f[B]Options for jarsigner\f[R]. +.TP +\f[CR]\-verify\f[R] +The \f[CR]\-verify\f[R] option can take zero or more keystore alias +names after the JAR file name. +When the \f[CR]\-verify\f[R] option is specified, the +\f[CR]jarsigner\f[R] command checks that the certificate used to verify +each signed entry in the JAR file matches one of the keystore aliases. +The aliases are defined in the keystore specified by +\f[CR]\-keystore\f[R] or the default keystore. +.RS +If you also specify the \f[CR]\-strict\f[R] option, and the +\f[CR]jarsigner\f[R] command detects severe warnings, the message, +\(dqjar verified, with signer errors\(dq is displayed. +.RE +.TP +\f[I]jar\-file\f[R] +The JAR file to be signed. +.RS +If you also specified the \f[CR]\-strict\f[R] option, and the +\f[CR]jarsigner\f[R] command detected severe warnings, the message, +\(dqjar signed, with signer errors\(dq is displayed. +.RE +.TP +\f[I]alias\f[R] +The aliases are defined in the keystore specified by +\f[CR]\-keystore\f[R] or the default keystore. +.TP +\f[CR]\-version\f[R] +The \f[CR]\-version\f[R] option prints the program version of +\f[CR]jarsigner\f[R]. +.SH DESCRIPTION +The \f[CR]jarsigner\f[R] tool has two purposes: +.IP \(bu 2 +To sign Java Archive (JAR) files. +.IP \(bu 2 +To verify the signatures and integrity of signed JAR files. +.PP +The JAR feature enables the packaging of class files, images, sounds, +and other digital data in a single file for faster and easier +distribution. +A tool named \f[CR]jar\f[R] enables developers to produce JAR files. +(Technically, any ZIP file can also be considered a JAR file, although +when created by the \f[CR]jar\f[R] command or processed by the +\f[CR]jarsigner\f[R] command, JAR files also contain a +\f[CR]META\-INF/MANIFEST.MF\f[R] file.) +.PP +A digital signature is a string of bits that is computed from some data +(the data being signed) and the private key of an entity (a person, +company, and so on). +Similar to a handwritten signature, a digital signature has many useful +characteristics: +.IP \(bu 2 +Its authenticity can be verified by a computation that uses the public +key corresponding to the private key used to generate the signature. +.IP \(bu 2 +It can\(aqt be forged, assuming the private key is kept secret. +.IP \(bu 2 +It is a function of the data signed and thus can\(aqt be claimed to be +the signature for other data as well. +.IP \(bu 2 +The signed data can\(aqt be changed. +If the data is changed, then the signature can\(aqt be verified as +authentic. +.PP +To generate an entity\(aqs signature for a file, the entity must first +have a public/private key pair associated with it and one or more +certificates that authenticate its public key. +A certificate is a digitally signed statement from one entity that says +that the public key of another entity has a particular value. +.PP +The \f[CR]jarsigner\f[R] command uses key and certificate information +from a keystore to generate digital signatures for JAR files. +A keystore is a database of private keys and their associated X.509 +certificate chains that authenticate the corresponding public keys. +The \f[CR]keytool\f[R] command is used to create and administer +keystores. +.PP +The \f[CR]jarsigner\f[R] command uses an entity\(aqs private key to +generate a signature. +The signed JAR file contains, among other things, a copy of the +certificate from the keystore for the public key corresponding to the +private key used to sign the file. +The \f[CR]jarsigner\f[R] command can verify the digital signature of the +signed JAR file using the certificate inside it (in its signature block +file). +.PP +The \f[CR]jarsigner\f[R] command can generate signatures that include a +time stamp that enables a systems or deployer to check whether the JAR +file was signed while the signing certificate was still valid. +.PP +In addition, APIs allow applications to obtain the timestamp +information. +.PP +At this time, the \f[CR]jarsigner\f[R] command can only sign JAR files +created by the \f[CR]jar\f[R] command or zip files. +JAR files are the same as zip files, except they also have a +\f[CR]META\-INF/MANIFEST.MF\f[R] file. +A \f[CR]META\-INF/MANIFEST.MF\f[R] file is created when the +\f[CR]jarsigner\f[R] command signs a zip file. +.PP +The default \f[CR]jarsigner\f[R] command behavior is to sign a JAR or +zip file. +Use the \f[CR]\-verify\f[R] option to verify a signed JAR file. +.PP +The \f[CR]jarsigner\f[R] command also attempts to validate the +signer\(aqs certificate after signing or verifying. +During validation, it checks the revocation status of each certificate +in the signer\(aqs certificate chain when the \f[CR]\-revCheck\f[R] +option is specified. +If there is a validation error or any other problem, the command +generates warning messages. +If you specify the \f[CR]\-strict\f[R] option, then the command treats +severe warnings as errors. +See \f[B]Errors and Warnings\f[R]. +.SH KEYSTORE ALIASES +All keystore entities are accessed with unique aliases. +.PP +When you use the \f[CR]jarsigner\f[R] command to sign a JAR file, you +must specify the alias for the keystore entry that contains the private +key needed to generate the signature. +If no output file is specified, it overwrites the original JAR file with +the signed JAR file. +.PP +Keystores are protected with a password, so the store password must be +specified. +You are prompted for it when you don\(aqt specify it on the command +line. +Similarly, private keys are protected in a keystore with a password, so +the private key\(aqs password must be specified, and you are prompted +for the password when you don\(aqt specify it on the command line and it +isn\(aqt the same as the store password. +.SH KEYSTORE LOCATION +The \f[CR]jarsigner\f[R] command has a \f[CR]\-keystore\f[R] option for +specifying the URL of the keystore to be used. +The keystore is by default stored in a file named \f[CR].keystore\f[R] +in the user\(aqs home directory, as determined by the +\f[CR]user.home\f[R] system property. +.PP +\f[B]Linux and macOS:\f[R] \f[CR]user.home\f[R] defaults to the +user\(aqs home directory. +.PP +The input stream from the \f[CR]\-keystore\f[R] option is passed to the +\f[CR]KeyStore.load\f[R] method. +If \f[CR]NONE\f[R] is specified as the URL, then a null stream is passed +to the \f[CR]KeyStore.load\f[R] method. +\f[CR]NONE\f[R] should be specified when the \f[CR]KeyStore\f[R] class +isn\(aqt file based, for example, when it resides on a hardware token +device. +.SH KEYSTORE IMPLEMENTATION +The \f[CR]KeyStore\f[R] class provided in the \f[CR]java.security\f[R] +package supplies a number of well\-defined interfaces to access and +modify the information in a keystore. +You can have multiple different concrete implementations, where each +implementation is for a particular type of keystore. +.PP +Currently, there are two command\-line tools that use keystore +implementations (\f[CR]keytool\f[R] and \f[CR]jarsigner\f[R]). +.PP +The default keystore implementation is \f[CR]PKCS12\f[R]. +This is a cross platform keystore based on the RSA PKCS12 Personal +Information Exchange Syntax Standard. +This standard is primarily meant for storing or transporting a user\(aqs +private keys, certificates, and miscellaneous secrets. +There is another built\-in implementation, provided by Oracle. +It implements the keystore as a file with a proprietary keystore type +(format) named \f[CR]JKS\f[R]. +It protects each private key with its individual password, and also +protects the integrity of the entire keystore with a (possibly +different) password. +.PP +Keystore implementations are provider\-based, which means the +application interfaces supplied by the \f[CR]KeyStore\f[R] class are +implemented in terms of a Service Provider Interface (SPI). +There is a corresponding abstract \f[CR]KeystoreSpi\f[R] class, also in +the \f[CR]java.security package\f[R], that defines the Service Provider +Interface methods that providers must implement. +The term provider refers to a package or a set of packages that supply a +concrete implementation of a subset of services that can be accessed by +the Java Security API. +To provide a keystore implementation, clients must implement a provider +and supply a \f[CR]KeystoreSpi\f[R] subclass implementation, as +described in \f[B]How to Implement a Provider in the Java Cryptography +Architecture\f[R] +[https://www.oracle.com/pls/topic/lookup?ctx=en/java/javase&id=security_guide_implement_provider_jca]. +.PP +Applications can choose different types of keystore implementations from +different providers, with the \f[CR]getInstance\f[R] factory method in +the \f[CR]KeyStore\f[R] class. +A keystore type defines the storage and data format of the keystore +information and the algorithms used to protect private keys in the +keystore and the integrity of the keystore itself. +Keystore implementations of different types aren\(aqt compatible. +.PP +The \f[CR]jarsigner\f[R] commands can read file\-based keystores from +any location that can be specified using a URL. +In addition, these commands can read non\-file\-based keystores such as +those provided by MSCAPI on Windows and PKCS11 on all platforms. +.PP +For the \f[CR]jarsigner\f[R] and \f[CR]keytool\f[R] commands, you can +specify a keystore type at the command line with the +\f[CR]\-storetype\f[R] option. +.PP +If you don\(aqt explicitly specify a keystore type, then the tools +choose a keystore implementation based on the value of the +\f[CR]keystore.type\f[R] property specified in the security properties +file. +The security properties file is called \f[CR]java.security\f[R], and it +resides in the JDK security properties directory, +\f[CR]java.home/conf/security\f[R]. +.PP +Each tool gets the \f[CR]keystore.type\f[R] value and then examines all +the installed providers until it finds one that implements keystores of +that type. +It then uses the keystore implementation from that provider. +.PP +The \f[CR]KeyStore\f[R] class defines a static method named +\f[CR]getDefaultType\f[R] that lets applications retrieve the value of +the \f[CR]keystore.type\f[R] property. +The following line of code creates an instance of the default keystore +type as specified in the \f[CR]keystore.type\f[R] property: +.RS +.PP +\f[CR]KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());\f[R] +.RE +.PP +The default keystore type is \f[CR]pkcs12\f[R], which is a cross +platform keystore based on the RSA PKCS12 Personal Information Exchange +Syntax Standard. +This is specified by the following line in the security properties file: +.RS +.PP +\f[CR]keystore.type=pkcs12\f[R] +.RE +.PP +Case doesn\(aqt matter in keystore type designations. +For example, \f[CR]JKS\f[R] is the same as \f[CR]jks\f[R]. +.PP +To have the tools utilize a keystore implementation other than the +default, you can change that line to specify a different keystore type. +For example, if you want to use the Oracle\(aqs \f[CR]jks\f[R] keystore +implementation, then change the line to the following: +.RS +.PP +\f[CR]keystore.type=jks\f[R] +.RE +.SH SUPPORTED ALGORITHMS +By default, the \f[CR]jarsigner\f[R] command signs a JAR file using one +of the following algorithms and block file extensions depending on the +type and size of the private key: +.PP +Default Signature Algorithms and Block File Extensions +.TS +tab(@); +l l l l. +T{ +keyalg +T}@T{ +key size +T}@T{ +default sigalg +T}@T{ +block file extension +T} +_ +T{ +DSA +T}@T{ +any size +T}@T{ +SHA256withDSA +T}@T{ +\&.DSA +T} +T{ +RSA +T}@T{ +< 624 +T}@T{ +SHA256withRSA +T}@T{ +\&.RSA +T} +T{ +T}@T{ +<= 7680 +T}@T{ +SHA384withRSA +T}@T{ +T} +T{ +T}@T{ +> 7680 +T}@T{ +SHA512withRSA +T}@T{ +T} +T{ +EC +T}@T{ +< 512 +T}@T{ +SHA384withECDSA +T}@T{ +\&.EC +T} +T{ +T}@T{ +>= 512 +T}@T{ +SHA512withECDSA +T}@T{ +T} +T{ +RSASSA\-PSS +T}@T{ +< 624 +T}@T{ +RSASSA\-PSS (with SHA\-256) +T}@T{ +\&.RSA +T} +T{ +T}@T{ +<= 7680 +T}@T{ +RSASSA\-PSS (with SHA\-384) +T}@T{ +T} +T{ +T}@T{ +> 7680 +T}@T{ +RSASSA\-PSS (with SHA\-512) +T}@T{ +T} +T{ +EdDSA +T}@T{ +255 +T}@T{ +Ed25519 +T}@T{ +\&.EC +T} +T{ +T}@T{ +448 +T}@T{ +Ed448 +T}@T{ +T} +.TE +.IP \(bu 2 +If an RSASSA\-PSS key is encoded with parameters, then jarsigner will +use the same parameters in the signature. +Otherwise, jarsigner will use parameters that are determined by the size +of the key as specified in the table above. +For example, an 3072\-bit RSASSA\-PSS key will use RSASSA\-PSS as the +signature algorithm and SHA\-384 as the hash and MGF1 algorithms. +.IP \(bu 2 +If a key algorithm is not listed in this table, the \f[CR].DSA\f[R] +extension is used when signing a JAR file. +.PP +These default signature algorithms can be overridden by using the +\f[CR]\-sigalg\f[R] option. +.PP +The \f[CR]jarsigner\f[R] command uses the +\f[CR]jdk.jar.disabledAlgorithms\f[R] and +\f[CR]jdk.security.legacyAlgorithms\f[R] security properties to +determine which algorithms are considered a security risk. +If the JAR file was signed with any algorithms that are disabled, it +will be treated as an unsigned JAR file. +If the JAR file was signed with any legacy algorithms, it will be +treated as signed with an informational warning to inform users that the +legacy algorithm will be disabled in a future update. +For detailed verification output, include +\f[CR]\-J\-Djava.security.debug=jar\f[R]. +The \f[CR]jdk.jar.disabledAlgorithms\f[R] and +\f[CR]jdk.security.legacyAlgorithms\f[R] security properties are defined +in the \f[CR]java.security\f[R] file (located in the JDK\(aqs +\f[CR]$JAVA_HOME/conf/security\f[R] directory). +.PP +\f[B]Note:\f[R] +.PP +In order to improve out of the box security, default key size and +signature algorithm names are periodically updated to stronger values +with each release of the JDK. +If interoperability with older releases of the JDK is important, please +make sure the defaults are supported by those releases, or alternatively +use the \f[CR]\-sigalg\f[R] option to override the default values at +your own risk. +.SH THE SIGNED JAR FILE +When the \f[CR]jarsigner\f[R] command is used to sign a JAR file, the +output signed JAR file is exactly the same as the input JAR file, except +that it has two additional files placed in the META\-INF directory: +.IP \(bu 2 +A signature file with an \f[CR].SF\f[R] extension +.IP \(bu 2 +A signature block file with a \f[CR].DSA\f[R], \f[CR].RSA\f[R], or +\f[CR].EC\f[R] extension +.PP +The base file names for these two files come from the value of the +\f[CR]\-sigfile\f[R] option. +For example, when the option is \f[CR]\-sigfile MKSIGN\f[R], the files +are named \f[CR]MKSIGN.SF\f[R] and \f[CR]MKSIGN.RSA\f[R]. +In this document, we assume the signer always uses an RSA key. +.PP +If no \f[CR]\-sigfile\f[R] option appears on the command line, then the +base file name for the \f[CR].SF\f[R] and the signature block files is +the first 8 characters of the alias name specified on the command line, +all converted to uppercase. +If the alias name has fewer than 8 characters, then the full alias name +is used. +If the alias name contains any characters that aren\(aqt allowed in a +signature file name, then each such character is converted to an +underscore (_) character in forming the file name. +Valid characters include letters, digits, underscores, and hyphens. +.SH SIGNATURE FILE +A signature file (\f[CR].SF\f[R] file) looks similar to the manifest +file that is always included in a JAR file when the \f[CR]jarsigner\f[R] +command is used to sign the file. +For each source file included in the JAR file, the \f[CR].SF\f[R] file +has two lines, such as in the manifest file, that list the following: +.IP \(bu 2 +File name +.IP \(bu 2 +Name of the digest algorithm (SHA) +.IP \(bu 2 +SHA digest value +.PP +\f[B]Note:\f[R] +.PP +The name of the digest algorithm (SHA) and the SHA digest value are on +the same line. +.PP +In the manifest file, the SHA digest value for each source file is the +digest (hash) of the binary data in the source file. +In the \f[CR].SF\f[R] file, the digest value for a specified source file +is the hash of the two lines in the manifest file for the source file. +.PP +The signature file, by default, includes a header with a hash of the +whole manifest file. +The header also contains a hash of the manifest header. +The presence of the header enables verification optimization. +See \f[B]JAR File Verification\f[R]. +.SH SIGNATURE BLOCK FILE +The \f[CR].SF\f[R] file is signed and the signature is placed in the +signature block file. +This file also contains, encoded inside it, the certificate or +certificate chain from the keystore that authenticates the public key +corresponding to the private key used for signing. +The file has the extension \f[CR].DSA\f[R], \f[CR].RSA\f[R], or +\f[CR].EC\f[R], depending on the key algorithm used. +See the table in \f[B]Supported Algorithms\f[R]. +.SH SIGNATURE TIME STAMP +The \f[CR]jarsigner\f[R] command used with the following options +generates and stores a signature time stamp when signing a JAR file: +.IP \(bu 2 +\f[CR]\-tsa\f[R] \f[I]url\f[R] +.IP \(bu 2 +\f[CR]\-tsacert\f[R] \f[I]alias\f[R] +.IP \(bu 2 +\f[CR]\-tsapolicyid\f[R] \f[I]policyid\f[R] +.IP \(bu 2 +\f[CR]\-tsadigestalg\f[R] \f[I]algorithm\f[R] +.PP +See \f[B]Options for jarsigner\f[R]. +.SH JAR FILE VERIFICATION +A successful JAR file verification occurs when the signatures are valid, +and none of the files that were in the JAR file when the signatures were +generated have changed since then. +JAR file verification involves the following steps: +.IP "1." 3 +Verify the signature of the \f[CR].SF\f[R] file. +.RS 4 +.PP +The verification ensures that the signature stored in each signature +block file was generated using the private key corresponding to the +public key whose certificate (or certificate chain) also appears in the +signature block file. +It also ensures that the signature is a valid signature of the +corresponding signature (\f[CR].SF\f[R]) file, and thus the +\f[CR].SF\f[R] file wasn\(aqt tampered with. +.RE +.IP "2." 3 +Verify the digest listed in each entry in the \f[CR].SF\f[R] file with +each corresponding section in the manifest. +.RS 4 +.PP +The \f[CR].SF\f[R] file by default includes a header that contains a +hash of the entire manifest file. +When the header is present, the verification can check to see whether or +not the hash in the header matches the hash of the manifest file. +If there is a match, then verification proceeds to the next step. +.PP +If there is no match, then a less optimized verification is required to +ensure that the hash in each source file information section in the +\f[CR].SF\f[R] file equals the hash of its corresponding section in the +manifest file. +See Signature File. +.PP +One reason the hash of the manifest file that is stored in the +\f[CR].SF\f[R] file header might not equal the hash of the current +manifest file is that it might contain sections for newly added files +after the file was signed. +For example, suppose one or more files were added to the signed JAR file +(using the \f[CR]jar\f[R] tool) that already contains a signature and a +\f[CR].SF\f[R] file. +If the JAR file is signed again by a different signer, then the manifest +file is changed (sections are added to it for the new files by the +\f[CR]jarsigner\f[R] tool) and a new \f[CR].SF\f[R] file is created, but +the original \f[CR].SF\f[R] file is unchanged. +A verification is still considered successful if none of the files that +were in the JAR file when the original signature was generated have been +changed since then. +This is because the hashes in the non\-header sections of the +\f[CR].SF\f[R] file equal the hashes of the corresponding sections in +the manifest file. +.RE +.IP "3." 3 +Read each file in the JAR file that has an entry in the \f[CR].SF\f[R] +file. +While reading, compute the file\(aqs digest and compare the result with +the digest for this file in the manifest section. +The digests should be the same or verification fails. +.RS 4 +.PP +If any serious verification failures occur during the verification +process, then the process is stopped and a security exception is thrown. +The \f[CR]jarsigner\f[R] command catches and displays the exception. +.RE +.IP "4." 3 +Check for disabled algorithm usage. +See \f[B]Supported Algorithms\f[R]. +.PP +\f[B]Note:\f[R] +.PP +You should read any addition warnings (or errors if you specified the +\f[CR]\-strict\f[R] option), as well as the content of the certificate +(by specifying the \f[CR]\-verbose\f[R] and \f[CR]\-certs\f[R] options) +to determine if the signature can be trusted. +.SH MULTIPLE SIGNATURES FOR A JAR FILE +A JAR file can be signed by multiple people by running the +\f[CR]jarsigner\f[R] command on the file multiple times and specifying +the alias for a different person each time, as follows: +.IP +.EX +jarsigner myBundle.jar susan +jarsigner myBundle.jar kevin +.EE +.PP +When a JAR file is signed multiple times, there are multiple +\f[CR].SF\f[R] and signature block files in the resulting JAR file, one +pair for each signature. +In the previous example, the output JAR file includes files with the +following names: +.IP +.EX +SUSAN.SF +SUSAN.RSA +KEVIN.SF +KEVIN.RSA +.EE +.SH OPTIONS FOR JARSIGNER +The following sections describe the options for the +\f[CR]jarsigner\f[R]. +Be aware of the following standards: +.IP \(bu 2 +All option names are preceded by a hyphen sign (\-). +.IP \(bu 2 +The options can be provided in any order. +.IP \(bu 2 +Items that are in italics or underlined (option values) represent the +actual values that must be supplied. +.IP \(bu 2 +The \f[CR]\-storepass\f[R], \f[CR]\-keypass\f[R], \f[CR]\-sigfile\f[R], +\f[CR]\-sigalg\f[R], \f[CR]\-digestalg\f[R], \f[CR]\-signedjar\f[R], and +TSA\-related options are only relevant when signing a JAR file; they +aren\(aqt relevant when verifying a signed JAR file. +The \f[CR]\-keystore\f[R] option is relevant for signing and verifying a +JAR file. +In addition, aliases are specified when signing and verifying a JAR +file. +.TP +\f[CR]\-keystore\f[R] \f[I]url\f[R] +Specifies the URL that tells the keystore location. +This defaults to the file \f[CR].keystore\f[R] in the user\(aqs home +directory, as determined by the \f[CR]user.home\f[R] system property. +.RS +A keystore is required when signing. +You must explicitly specify a keystore when the default keystore +doesn\(aqt exist or if you want to use one other than the default. +A keystore isn\(aqt required when verifying, but if one is specified or +the default exists and the \f[CR]\-verbose\f[R] option was also +specified, then additional information is output regarding whether or +not any of the certificates used to verify the JAR file are contained in +that keystore. +The \f[CR]\-keystore\f[R] argument can be a file name and path +specification rather than a URL, in which case it is treated the same as +a file: URL, for example, the following are equivalent: +.IP \(bu 2 +\f[CR]\-keystore\f[R] \f[I]filePathAndName\f[R] +.IP \(bu 2 +\f[CR]\-keystore file:\f[R]\f[I]filePathAndName\f[R] +If the Sun PKCS #11 provider was configured in the +\f[CR]java.security\f[R] security properties file (located in the +JDK\(aqs \f[CR]$JAVA_HOME/conf/security\f[R] directory), then the +\f[CR]keytool\f[R] and \f[CR]jarsigner\f[R] tools can operate on the +PKCS #11 token by specifying these options: +.RS +.PP +\f[CR]\-keystore NONE \-storetype PKCS11\f[R] +.RE +For example, the following command lists the contents of the configured +PKCS#11 token: +.RS +.PP +\f[CR]keytool \-keystore NONE \-storetype PKCS11 \-list\f[R] +.RE +.RE +.TP +\f[CR]\-storepass\f[R] [\f[CR]:env\f[R] | \f[CR]:file\f[R]] \f[I]argument\f[R] +Specifies the password that is required to access the keystore. +This is only needed when signing (not verifying) a JAR file. +In that case, if a \f[CR]\-storepass\f[R] option isn\(aqt provided at +the command line, then the user is prompted for the password. +.RS +If the modifier \f[CR]env\f[R] or \f[CR]file\f[R] isn\(aqt specified, +then the password has the value \f[CR]argument\f[R]. +Otherwise, the password is retrieved as follows: +.IP \(bu 2 +\f[CR]env\f[R]: Retrieve the password from the environment variable +named \f[I]argument\f[R]. +.IP \(bu 2 +\f[CR]file\f[R]: Retrieve the password from the file named +\f[I]argument\f[R]. +\f[B]Note:\f[R] +The password shouldn\(aqt be specified on the command line or in a +script unless it is for testing purposes, or you are on a secure system. +.RE +.TP +\f[CR]\-storetype\f[R] \f[I]storetype\f[R] +Specifies the type of keystore to be instantiated. +The default keystore type is the one that is specified as the value of +the \f[CR]keystore.type\f[R] property in the security properties file, +which is returned by the static \f[CR]getDefaultType\f[R] method in +\f[CR]java.security.KeyStore\f[R]. +.RS +The PIN for a PKCS #11 token can also be specified with the +\f[CR]\-storepass\f[R] option. +If none is specified, then the \f[CR]keytool\f[R] and +\f[CR]jarsigner\f[R] commands prompt for the token PIN. +If the token has a protected authentication path (such as a dedicated +PIN\-pad or a biometric reader), then the \f[CR]\-protected\f[R] option +must be specified and no password options can be specified. +.RE +.TP +\f[CR]\-keypass\f[R] [\f[CR]:env\f[R] | \f[CR]:file\f[R]] \f[I]argument\f[R] \f[CR]\-certchain\f[R] \f[I]file\f[R] +Specifies the password used to protect the private key of the keystore +entry addressed by the alias specified on the command line. +The password is required when using \f[CR]jarsigner\f[R] to sign a JAR +file. +If no password is provided on the command line, and the required +password is different from the store password, then the user is prompted +for it. +.RS +If the modifier \f[CR]env\f[R] or \f[CR]file\f[R] isn\(aqt specified, +then the password has the value \f[CR]argument\f[R]. +Otherwise, the password is retrieved as follows: +.IP \(bu 2 +\f[CR]env\f[R]: Retrieve the password from the environment variable +named \f[I]argument\f[R]. +.IP \(bu 2 +\f[CR]file\f[R]: Retrieve the password from the file named +\f[I]argument\f[R]. +\f[B]Note:\f[R] +The password shouldn\(aqt be specified on the command line or in a +script unless it is for testing purposes, or you are on a secure system. +.RE +.TP +\f[CR]\-certchain\f[R] \f[I]file\f[R] +Specifies the certificate chain to be used when the certificate chain +associated with the private key of the keystore entry that is addressed +by the alias specified on the command line isn\(aqt complete. +This can happen when the keystore is located on a hardware token where +there isn\(aqt enough capacity to hold a complete certificate chain. +The file can be a sequence of concatenated X.509 certificates, or a +single PKCS#7 formatted data block, either in binary encoding format or +in printable encoding format (also known as Base64 encoding) as defined +by \f[B]Internet RFC 1421 Certificate Encoding Standard\f[R] +[http://tools.ietf.org/html/rfc1421]. +.TP +\f[CR]\-sigfile\f[R] \f[I]file\f[R] +Specifies the base file name to be used for the generated \f[CR].SF\f[R] +and signature block files. +For example, if file is \f[CR]DUKESIGN\f[R], then the generated +\f[CR].SF\f[R] and signature block files are named +\f[CR]DUKESIGN.SF\f[R] and \f[CR]DUKESIGN.RSA\f[R], and placed in the +\f[CR]META\-INF\f[R] directory of the signed JAR file. +.RS +The characters in the file must come from the set +\f[CR]a\-zA\-Z0\-9_\-\f[R]. +Only letters, numbers, underscore, and hyphen characters are allowed. +All lowercase characters are converted to uppercase for the +\f[CR].SF\f[R] and signature block file names. +If no \f[CR]\-sigfile\f[R] option appears on the command line, then the +base file name for the \f[CR].SF\f[R] and signature block files is the +first 8 characters of the alias name specified on the command line, all +converted to upper case. +If the alias name has fewer than 8 characters, then the full alias name +is used. +If the alias name contains any characters that aren\(aqt valid in a +signature file name, then each such character is converted to an +underscore (_) character to form the file name. +.RE +.TP +\f[CR]\-signedjar\f[R] \f[I]file\f[R] +Specifies the name of signed JAR file. +.TP +\f[CR]\-digestalg\f[R] \f[I]algorithm\f[R] +Specifies the name of the message digest algorithm to use when digesting +the entries of a JAR file. +.RS +For a list of standard message digest algorithm names, see the Java +Security Standard Algorithm Names Specification. +If this option isn\(aqt specified, then \f[CR]SHA\-384\f[R] is used. +There must either be a statically installed provider supplying an +implementation of the specified algorithm or the user must specify one +with the \f[CR]\-addprovider\f[R] or \f[CR]\-providerClass\f[R] options; +otherwise, the command will not succeed. +.RE +.TP +\f[CR]\-sigalg\f[R] \f[I]algorithm\f[R] +Specifies the name of the signature algorithm to use to sign the JAR +file. +.RS +This algorithm must be compatible with the private key used to sign the +JAR file. +If this option isn\(aqt specified, then use a default algorithm matching +the private key as described in the \f[B]Supported Algorithms\f[R] +section. +There must either be a statically installed provider supplying an +implementation of the specified algorithm or you must specify one with +the \f[CR]\-addprovider\f[R] or \f[CR]\-providerClass\f[R] option; +otherwise, the command doesn\(aqt succeed. +For a list of standard signature algorithm names, see the Java Security +Standard Algorithm Names Specification. +.RE +.TP +\f[CR]\-verify\f[R] +Verifies a signed JAR file. +.TP +\f[CR]\-verbose\f[R][\f[CR]:\f[R]\f[I]suboptions\f[R]] +When the \f[CR]\-verbose\f[R] option appears on the command line, it +indicates that the \f[CR]jarsigner\f[R] use the verbose mode when +signing or verifying with the suboptions determining how much +information is shown. +This causes the , which causes \f[CR]jarsigner\f[R] to output extra +information about the progress of the JAR signing or verification. +The \f[I]suboptions\f[R] can be \f[CR]all\f[R], \f[CR]grouped\f[R], or +\f[CR]summary\f[R]. +.RS +If the \f[CR]\-certs\f[R] option is also specified, then the default +mode (or suboption \f[CR]all\f[R]) displays each entry as it is being +processed, and after that, the certificate information for each signer +of the JAR file. +If the \f[CR]\-certs\f[R] and the \f[CR]\-verbose:grouped\f[R] +suboptions are specified, then entries with the same signer info are +grouped and displayed together with their certificate information. +If \f[CR]\-certs\f[R] and the \f[CR]\-verbose:summary\f[R] suboptions +are specified, then entries with the same signer information are grouped +and displayed together with their certificate information. +Details about each entry are summarized and displayed as \f[I]one entry +(and more)\f[R]. +See \f[B]Example of Verifying a Signed JAR File\f[R] and \f[B]Example of +Verification with Certificate Information\f[R]. +.RE +.TP +\f[CR]\-certs\f[R] +If the \f[CR]\-certs\f[R] option appears on the command line with the +\f[CR]\-verify\f[R] and \f[CR]\-verbose\f[R] options, then the output +includes certificate information for each signer of the JAR file. +This information includes the name of the type of certificate (stored in +the signature block file) that certifies the signer\(aqs public key, and +if the certificate is an X.509 certificate (an instance of the +\f[CR]java.security.cert.X509Certificate\f[R]), then the distinguished +name of the signer. +.RS +The keystore is also examined. +If no keystore value is specified on the command line, then the default +keystore file (if any) is checked. +If the public key certificate for a signer matches an entry in the +keystore, then the alias name for the keystore entry for that signer is +displayed in parentheses. +.RE +.TP +\f[CR]\-revCheck\f[R] +This option enables revocation checking of certificates when signing or +verifying a JAR file. +The \f[CR]jarsigner\f[R] command attempts to make network connections to +fetch OCSP responses and CRLs if the \f[CR]\-revCheck\f[R] option is +specified on the command line. +Note that revocation checks are not enabled unless this option is +specified. +.TP +\f[CR]\-tsa\f[R] \f[I]url\f[R] +If \f[CR]\-tsa http://example.tsa.url\f[R] appears on the command line +when signing a JAR file then a time stamp is generated for the +signature. +The URL, \f[CR]http://example.tsa.url\f[R], identifies the location of +the Time Stamping Authority (TSA) and overrides any URL found with the +\f[CR]\-tsacert\f[R] option. +The \f[CR]\-tsa\f[R] option doesn\(aqt require the TSA public key +certificate to be present in the keystore. +.RS +To generate the time stamp, \f[CR]jarsigner\f[R] communicates with the +TSA with the Time\-Stamp Protocol (TSP) defined in RFC 3161. +When successful, the time stamp token returned by the TSA is stored with +the signature in the signature block file. +.RE +.TP +\f[CR]\-tsacert\f[R] \f[I]alias\f[R] +When \f[CR]\-tsacert\f[R] \f[I]alias\f[R] appears on the command line +when signing a JAR file, a time stamp is generated for the signature. +The alias identifies the TSA public key certificate in the keystore that +is in effect. +The entry\(aqs certificate is examined for a Subject Information Access +extension that contains a URL identifying the location of the TSA. +.RS +The TSA public key certificate must be present in the keystore when +using the \f[CR]\-tsacert\f[R] option. +.RE +.TP +\f[CR]\-tsapolicyid\f[R] \f[I]policyid\f[R] +Specifies the object identifier (OID) that identifies the policy ID to +be sent to the TSA server. +If this option isn\(aqt specified, no policy ID is sent and the TSA +server will choose a default policy ID. +.RS +Object identifiers are defined by X.696, which is an ITU +Telecommunication Standardization Sector (ITU\-T) standard. +These identifiers are typically period\-separated sets of non\-negative +digits like \f[CR]1.2.3.4\f[R], for example. +.RE +.TP +\f[CR]\-tsadigestalg\f[R] \f[I]algorithm\f[R] +Specifies the message digest algorithm that is used to generate the +message imprint to be sent to the TSA server. +If this option isn\(aqt specified, SHA\-384 will be used. +.RS +See \f[B]Supported Algorithms\f[R]. +For a list of standard message digest algorithm names, see the Java +Security Standard Algorithm Names Specification. +.RE +.TP +\f[CR]\-internalsf\f[R] +In the past, the signature block file generated when a JAR file was +signed included a complete encoded copy of the \f[CR].SF\f[R] file +(signature file) also generated. +This behavior has been changed. +To reduce the overall size of the output JAR file, the signature block +file by default doesn\(aqt contain a copy of the \f[CR].SF\f[R] file +anymore. +If \f[CR]\-internalsf\f[R] appears on the command line, then the old +behavior is utilized. +This option is useful for testing. +In practice, don\(aqt use the \f[CR]\-internalsf\f[R] option because it +incurs higher overhead. +.TP +\f[CR]\-sectionsonly\f[R] +If the \f[CR]\-sectionsonly\f[R] option appears on the command line, +then the \f[CR].SF\f[R] file (signature file) generated when a JAR file +is signed doesn\(aqt include a header that contains a hash of the whole +manifest file. +It contains only the information and hashes related to each individual +source file included in the JAR file. +See Signature File. +.RS +By default, this header is added, as an optimization. +When the header is present, whenever the JAR file is verified, the +verification can first check to see whether the hash in the header +matches the hash of the whole manifest file. +When there is a match, verification proceeds to the next step. +When there is no match, it is necessary to do a less optimized +verification that the hash in each source file information section in +the \f[CR].SF\f[R] file equals the hash of its corresponding section in +the manifest file. +See \f[B]JAR File Verification\f[R]. +The \f[CR]\-sectionsonly\f[R] option is primarily used for testing. +It shouldn\(aqt be used other than for testing because using it incurs +higher overhead. +.RE +.TP +\f[CR]\-protected\f[R] +Values can be either \f[CR]true\f[R] or \f[CR]false\f[R]. +Specify \f[CR]true\f[R] when a password must be specified through a +protected authentication path such as a dedicated PIN reader. +.TP +\f[CR]\-providerName\f[R] \f[I]providerName\f[R] +If more than one provider was configured in the \f[CR]java.security\f[R] +security properties file, then you can use the \f[CR]\-providerName\f[R] +option to target a specific provider instance. +The argument to this option is the name of the provider. +.RS +For the Oracle PKCS #11 provider, \f[I]providerName\f[R] is of the form +\f[CR]SunPKCS11\-\f[R]\f[I]TokenName\f[R], where \f[I]TokenName\f[R] is +the name suffix that the provider instance has been configured with, as +detailed in the configuration attributes table. +For example, the following command lists the contents of the +\f[CR]PKCS #11\f[R] keystore provider instance with name suffix +\f[CR]SmartCard\f[R]: +.RS +.PP +\f[CR]jarsigner \-keystore NONE \-storetype PKCS11 \-providerName SunPKCS11\-SmartCard \-list\f[R] +.RE +.RE +.TP +\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerArg\f[R] \f[I]arg\f[R]] +Adds a security provider by name (such as SunPKCS11) and an optional +configure argument. +The value of the security provider is the name of a security provider +that is defined in a module. +.RS +Used with the \f[CR]\-providerArg ConfigFilePath\f[R] option, the +\f[CR]keytool\f[R] and \f[CR]jarsigner\f[R] tools install the provider +dynamically and use \f[CR]ConfigFilePath\f[R] for the path to the token +configuration file. +The following example shows a command to list a \f[CR]PKCS #11\f[R] +keystore when the Oracle PKCS #11 provider wasn\(aqt configured in the +security properties file. +.RS +.PP +\f[CR]jarsigner \-keystore NONE \-storetype PKCS11 \-addprovider SunPKCS11 \-providerArg /mydir1/mydir2/token.config\f[R] +.RE +.RE +.TP +\f[CR]\-providerClass\f[R] \f[I]provider\-class\-name\f[R] [\f[CR]\-providerArg\f[R] \f[I]arg\f[R]] +Used to specify the name of cryptographic service provider\(aqs master +class file when the service provider isn\(aqt listed in the +\f[CR]java.security\f[R] security properties file. +Adds a security provider by fully\-qualified class name and an optional +configure argument. +.RS +\f[B]Note:\f[R] +The preferred way to load PKCS11 is by using modules. +See \f[CR]\-addprovider\f[R]. +.RE +.TP +\f[CR]\-providerPath\f[R] \f[I]classpath\f[R] +Used to specify the classpath for providers specified by the +\f[CR]\-providerClass\f[R] option. +Multiple paths should be separated by the system\-dependent +path\-separator character. +.TP +\f[CR]\-J\f[R]\f[I]javaoption\f[R] +Passes through the specified \f[I]javaoption\f[R] string directly to the +Java interpreter. +The \f[CR]jarsigner\f[R] command is a wrapper around the interpreter. +This option shouldn\(aqt contain any spaces. +It is useful for adjusting the execution environment or memory usage. +For a list of possible interpreter options, type \f[CR]java \-h\f[R] or +\f[CR]java \-X\f[R] at the command line. +.TP +\f[CR]\-strict\f[R] +During the signing or verifying process, the command may issue warning +messages. +If you specify this option, the exit code of the tool reflects the +severe warning messages that this command found. +See \f[B]Errors and Warnings\f[R]. +.TP +\f[CR]\-conf\f[R] \f[I]url\f[R] +Specifies a pre\-configured options file. +Read the \f[B]keytool documentation\f[R] for details. +The property keys supported are \(dqjarsigner.all\(dq for all actions, +\(dqjarsigner.sign\(dq for signing, and \(dqjarsigner.verify\(dq for +verification. +\f[CR]jarsigner\f[R] arguments including the JAR file name and alias +name(s) cannot be set in this file. +.TP +\f[CR]\-version\f[R] +Prints the program version. +.SH ERRORS AND WARNINGS +During the signing or verifying process, the \f[CR]jarsigner\f[R] +command may issue various errors or warnings. +.PP +If there is a failure, the \f[CR]jarsigner\f[R] command exits with code +1. +If there is no failure, but there are one or more severe warnings, the +\f[CR]jarsigner\f[R] command exits with code 0 when the +\f[CR]\-strict\f[R] option is \f[B]not\f[R] specified, or exits with the +OR\-value of the warning codes when the \f[CR]\-strict\f[R] is +specified. +If there is only informational warnings or no warning at all, the +command always exits with code 0. +.PP +For example, if a certificate used to sign an entry is expired and has a +KeyUsage extension that doesn\(aqt allow it to sign a file, the +\f[CR]jarsigner\f[R] command exits with code 12 (=4+8) when the +\f[CR]\-strict\f[R] option is specified. +.PP +\f[B]Note:\f[R] Exit codes are reused because only the values from 0 to +255 are legal on Linux and macOS. +.PP +The following sections describes the names, codes, and descriptions of +the errors and warnings that the \f[CR]jarsigner\f[R] command can issue. +.SH FAILURE +Reasons why the \f[CR]jarsigner\f[R] command fails include (but +aren\(aqt limited to) a command line parsing error, the inability to +find a keypair to sign the JAR file, or the verification of a signed JAR +fails. +.TP +failure +Code 1. +The signing or verifying fails. +.SH SEVERE WARNINGS +\f[B]Note:\f[R] +.PP +Severe warnings are reported as errors if you specify the +\f[CR]\-strict\f[R] option. +.PP +Reasons why the \f[CR]jarsigner\f[R] command issues a severe warning +include the certificate used to sign the JAR file has an error or the +signed JAR file has other problems. +.TP +hasExpiredCert +Code 4. +This JAR contains entries whose signer certificate has expired. +.TP +hasExpiredTsaCert +Code 4. +The timestamp has expired. +.TP +notYetValidCert +Code 4. +This JAR contains entries whose signer certificate isn\(aqt yet valid. +.TP +chainNotValidated +Code 4. +This JAR contains entries whose certificate chain isn\(aqt validated. +.TP +tsaChainNotValidated +Code 64. +The timestamp is invalid. +.TP +signerSelfSigned +Code 4. +This JAR contains entries whose signer certificate is self signed. +.TP +disabledAlg +Code 4. +An algorithm used is considered a security risk and is disabled. +.TP +badKeyUsage +Code 8. +This JAR contains entries whose signer certificate\(aqs KeyUsage +extension doesn\(aqt allow code signing. +.TP +badExtendedKeyUsage +Code 8. +This JAR contains entries whose signer certificate\(aqs ExtendedKeyUsage +extension doesn\(aqt allow code signing. +.TP +badNetscapeCertType +Code 8. +This JAR contains entries whose signer certificate\(aqs NetscapeCertType +extension doesn\(aqt allow code signing. +.TP +hasUnsignedEntry +Code 16. +This JAR contains unsigned entries which haven\(aqt been +integrity\-checked. +.TP +notSignedByAlias +Code 32. +This JAR contains signed entries which aren\(aqt signed by the specified +alias(es). +.TP +aliasNotInStore +Code 32. +This JAR contains signed entries that aren\(aqt signed by alias in this +keystore. +.TP +tsaChainNotValidated +Code 64. +This JAR contains entries whose TSA certificate chain is invalid. +.SH INFORMATIONAL WARNINGS +Informational warnings include those that aren\(aqt errors but regarded +as bad practice. +They don\(aqt have a code. +.TP +extraAttributesDetected +The POSIX file permissions and/or symlink attributes are detected during +signing or verifying a JAR file. +The \f[CR]jarsigner\f[R] tool preserves these attributes in the newly +signed file but warns that these attributes are unsigned and not +protected by the signature. +.TP +hasExpiringCert +This JAR contains entries whose signer certificate expires within six +months. +.TP +hasExpiringTsaCert +The timestamp will expire within one year on \f[CR]YYYY\-MM\-DD\f[R]. +.TP +hasMultipleManifests +This JAR contained multiple manifest files. +During signing, one of the files was selected, and the others were +discarded. +.TP +hasNonexistentEntries +This JAR contains signed entries for files that do not exist. +.TP +internalInconsistenciesDetected +This JAR contains internal inconsistencies detected during verification +that may result in different contents when reading via JarFile and +JarInputStream. +.TP +legacyAlg +An algorithm used is considered a security risk but not disabled. +.TP +noTimestamp +This JAR contains signatures that doesn\(aqt include a timestamp. +Without a timestamp, users may not be able to validate this JAR file +after the signer certificate\(aqs expiration date +(\f[CR]YYYY\-MM\-DD\f[R]) or after any future revocation date. +.SH EXAMPLE OF SIGNING A JAR FILE +Use the following command to sign \f[CR]bundle.jar\f[R] with the private +key of a user whose keystore alias is \f[CR]jane\f[R] in a keystore +named \f[CR]mystore\f[R] in the \f[CR]working\f[R] directory and name +the signed JAR file \f[CR]sbundle.jar\f[R]: +.RS +.PP +\f[CR]jarsigner \-keystore /working/mystore \-storepass\f[R] +\f[I]keystore_password\f[R] \f[CR]\-keypass\f[R] +\f[I]private_key_password\f[R] +\f[CR]\-signedjar sbundle.jar bundle.jar jane\f[R] +.RE +.PP +There is no \f[CR]\-sigfile\f[R] specified in the previous command so +the generated \f[CR].SF\f[R] and signature block files to be placed in +the signed JAR file have default names based on the alias name. +They are named \f[CR]JANE.SF\f[R] and \f[CR]JANE.RSA\f[R]. +.PP +If you want to be prompted for the store password and the private key +password, then you could shorten the previous command to the following: +.RS +.PP +\f[CR]jarsigner \-keystore /working/mystore \-signedjar sbundle.jar bundle.jar jane\f[R] +.RE +.PP +If the \f[CR]keystore\f[R] is the default \f[CR]keystore\f[R] +(\f[CR].keystore\f[R] in your home directory), then you don\(aqt need to +specify a \f[CR]keystore\f[R], as follows: +.RS +.PP +\f[CR]jarsigner \-signedjar sbundle.jar bundle.jar jane\f[R] +.RE +.PP +If you want the signed JAR file to overwrite the input JAR file +(\f[CR]bundle.jar\f[R]), then you don\(aqt need to specify a +\f[CR]\-signedjar\f[R] option, as follows: +.RS +.PP +\f[CR]jarsigner bundle.jar jane\f[R] +.RE +.SH EXAMPLE OF VERIFYING A SIGNED JAR FILE +To verify a signed JAR file to ensure that the signature is valid and +the JAR file wasn\(aqt been tampered with, use a command such as the +following: +.RS +.PP +\f[CR]jarsigner \-verify ButtonDemo.jar\f[R] +.RE +.PP +When the verification is successful, \f[CR]jar verified\f[R] is +displayed. +Otherwise, an error message is displayed. +You can get more information when you use the \f[CR]\-verbose\f[R] +option. +A sample use of \f[CR]jarsigner\f[R] with the \f[CR]\-verbose\f[R] +option follows: +.IP +.EX +jarsigner \-verify \-verbose ButtonDemo.jar + +s 866 Tue Sep 12 20:08:48 EDT 2017 META\-INF/MANIFEST.MF + 825 Tue Sep 12 20:08:48 EDT 2017 META\-INF/ORACLE_C.SF + 7475 Tue Sep 12 20:08:48 EDT 2017 META\-INF/ORACLE_C.RSA + 0 Tue Sep 12 20:07:54 EDT 2017 META\-INF/ + 0 Tue Sep 12 20:07:16 EDT 2017 components/ + 0 Tue Sep 12 20:07:16 EDT 2017 components/images/ +sm 523 Tue Sep 12 20:07:16 EDT 2017 components/ButtonDemo$1.class +sm 3440 Tue Sep 12 20:07:16 EDT 2017 components/ButtonDemo.class +sm 2346 Tue Sep 12 20:07:16 EDT 2017 components/ButtonDemo.jnlp +sm 172 Tue Sep 12 20:07:16 EDT 2017 components/images/left.gif +sm 235 Tue Sep 12 20:07:16 EDT 2017 components/images/middle.gif +sm 172 Tue Sep 12 20:07:16 EDT 2017 components/images/right.gif + + s = signature was verified + m = entry is listed in manifest + k = at least one certificate was found in keystore + +\- Signed by \(dqCN=\(dqOracle America, Inc.\(dq, OU=Software Engineering, O=\(dqOracle America, Inc.\(dq, L=Redwood City, ST=California, C=US\(dq + Digest algorithm: SHA\-256 + Signature algorithm: SHA256withRSA, 2048\-bit key + Timestamped by \(dqCN=Symantec Time Stamping Services Signer \- G4, O=Symantec Corporation, C=US\(dq on Tue Sep 12 20:08:49 UTC 2017 + Timestamp digest algorithm: SHA\-1 + Timestamp signature algorithm: SHA1withRSA, 2048\-bit key + +jar verified. + +The signer certificate expired on 2018\-02\-01. However, the JAR will be valid until the timestamp expires on 2020\-12\-29. +.EE +.SH EXAMPLE OF VERIFICATION WITH CERTIFICATE INFORMATION +If you specify the \f[CR]\-certs\f[R] option with the +\f[CR]\-verify\f[R] and \f[CR]\-verbose\f[R] options, then the output +includes certificate information for each signer of the JAR file. +The information includes the certificate type, the signer distinguished +name information (when it is an X.509 certificate), and in parentheses, +the keystore alias for the signer when the public key certificate in the +JAR file matches the one in a keystore entry, for example: +.IP +.EX +jarsigner \-keystore $JAVA_HOME/lib/security/cacerts \-verify \-verbose \-certs ButtonDemo.jar + +s k 866 Tue Sep 12 20:08:48 EDT 2017 META\-INF/MANIFEST.MF + + >>> Signer + X.509, CN=\(dqOracle America, Inc.\(dq, OU=Software Engineering, O=\(dqOracle America, Inc.\(dq, L=Redwood City, ST=California, C=US + [certificate is valid from 2017\-01\-30, 7:00 PM to 2018\-02\-01, 6:59 PM] + X.509, CN=Symantec Class 3 SHA256 Code Signing CA, OU=Symantec Trust Network, O=Symantec Corporation, C=US + [certificate is valid from 2013\-12\-09, 7:00 PM to 2023\-12\-09, 6:59 PM] + X.509, CN=VeriSign Class 3 Public Primary Certification Authority \- G5, OU=\(dq(c) 2006 VeriSign, Inc. \- For authorized use only\(dq, OU=VeriSign Trust Network, O=\(dqVeriSign, Inc.\(dq, C=US (verisignclass3g5ca [jdk]) + [trusted certificate] + >>> TSA + X.509, CN=Symantec Time Stamping Services Signer \- G4, O=Symantec Corporation, C=US + [certificate is valid from 2012\-10\-17, 8:00 PM to 2020\-12\-29, 6:59 PM] + X.509, CN=Symantec Time Stamping Services CA \- G2, O=Symantec Corporation, C=US + [certificate is valid from 2012\-12\-20, 7:00 PM to 2020\-12\-30, 6:59 PM] + + 825 Tue Sep 12 20:08:48 EDT 2017 META\-INF/ORACLE_C.SF + 7475 Tue Sep 12 20:08:48 EDT 2017 META\-INF/ORACLE_C.RSA + 0 Tue Sep 12 20:07:54 EDT 2017 META\-INF/ + 0 Tue Sep 12 20:07:16 EDT 2017 components/ + 0 Tue Sep 12 20:07:16 EDT 2017 components/images/ +smk 523 Tue Sep 12 20:07:16 EDT 2017 components/ButtonDemo$1.class + + [entry was signed on 2017\-09\-12, 4:08 PM] + >>> Signer + X.509, CN=\(dqOracle America, Inc.\(dq, OU=Software Engineering, O=\(dqOracle America, Inc.\(dq, L=Redwood City, ST=California, C=US + [certificate is valid from 2017\-01\-30, 7:00 PM to 2018\-02\-01, 6:59 PM] + X.509, CN=Symantec Class 3 SHA256 Code Signing CA, OU=Symantec Trust Network, O=Symantec Corporation, C=US + [certificate is valid from 2013\-12\-09, 7:00 PM to 2023\-12\-09, 6:59 PM] + X.509, CN=VeriSign Class 3 Public Primary Certification Authority \- G5, OU=\(dq(c) 2006 VeriSign, Inc. \- For authorized use only\(dq, OU=VeriSign Trust Network, O=\(dqVeriSign, Inc.\(dq, C=US (verisignclass3g5ca [jdk]) + [trusted certificate] + >>> TSA + X.509, CN=Symantec Time Stamping Services Signer \- G4, O=Symantec Corporation, C=US + [certificate is valid from 2012\-10\-17, 8:00 PM to 2020\-12\-29, 6:59 PM] + X.509, CN=Symantec Time Stamping Services CA \- G2, O=Symantec Corporation, C=US + [certificate is valid from 2012\-12\-20, 7:00 PM to 2020\-12\-30, 6:59 PM] + +smk 3440 Tue Sep 12 20:07:16 EDT 2017 components/ButtonDemo.class +\&... +smk 2346 Tue Sep 12 20:07:16 EDT 2017 components/ButtonDemo.jnlp +\&... +smk 172 Tue Sep 12 20:07:16 EDT 2017 components/images/left.gif +\&... +smk 235 Tue Sep 12 20:07:16 EDT 2017 components/images/middle.gif +\&... +smk 172 Tue Sep 12 20:07:16 EDT 2017 components/images/right.gif +\&... + + s = signature was verified + m = entry is listed in manifest + k = at least one certificate was found in keystore + +\- Signed by \(dqCN=\(dqOracle America, Inc.\(dq, OU=Software Engineering, O=\(dqOracle America, Inc.\(dq, L=Redwood City, ST=California, C=US\(dq + Digest algorithm: SHA\-256 + Signature algorithm: SHA256withRSA, 2048\-bit key + Timestamped by \(dqCN=Symantec Time Stamping Services Signer \- G4, O=Symantec Corporation, C=US\(dq on Tue Sep 12 20:08:49 UTC 2017 + Timestamp digest algorithm: SHA\-1 + Timestamp signature algorithm: SHA1withRSA, 2048\-bit key + +jar verified. + +The signer certificate expired on 2018\-02\-01. However, the JAR will be valid until the timestamp expires on 2020\-12\-29. +.EE +.PP +If the certificate for a signer isn\(aqt an X.509 certificate, then +there is no distinguished name information. +In that case, just the certificate type and the alias are shown. +For example, if the certificate is a PGP certificate, and the alias is +\f[CR]bob\f[R], then you would get: \f[CR]PGP, (bob)\f[R]. diff --git a/man/java.1 b/man/java.1 new file mode 100644 index 000000000..5aaad21fa --- /dev/null +++ b/man/java.1 @@ -0,0 +1,5432 @@ +'\" t +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JAVA" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +java \- launch a Java application +.SH SYNOPSIS +To launch a class file: +.PP +\f[CR]java\f[R] [\f[I]options\f[R]] \f[I]mainclass\f[R] [\f[I]args\f[R] +\&...] +.PP +To launch the main class in a JAR file: +.PP +\f[CR]java\f[R] [\f[I]options\f[R]] \f[CR]\-jar\f[R] \f[I]jarfile\f[R] +[\f[I]args\f[R] ...] +.PP +To launch the main class in a module: +.PP +\f[CR]java\f[R] [\f[I]options\f[R]] \f[CR]\-m\f[R] +\f[I]module\f[R][\f[CR]/\f[R]\f[I]mainclass\f[R]] [\f[I]args\f[R] ...] +.PP +or +.PP +\f[CR]java\f[R] [\f[I]options\f[R]] \f[CR]\-\-module\f[R] +\f[I]module\f[R][\f[CR]/\f[R]\f[I]mainclass\f[R]] [\f[I]args\f[R] ...] +.PP +To launch a source\-file program: +.PP +\f[CR]java\f[R] [\f[I]options\f[R]] \f[I]source\-file\f[R] +[\f[I]args\f[R] ...] +.TP +\f[I]options\f[R] +Optional: Specifies command\-line options separated by spaces. +See \f[B]Overview of Java Options\f[R] for a description of available +options. +.TP +\f[I]mainclass\f[R] +Specifies the name of the class to be launched. +Command\-line entries following \f[CR]classname\f[R] are the arguments +for the main method. +.TP +\f[CR]\-jar\f[R] \f[I]jarfile\f[R] +Executes a program encapsulated in a JAR file. +The \f[I]jarfile\f[R] argument is the name of a JAR file with a manifest +that contains a line in the form +\f[CR]Main\-Class:\f[R]\f[I]classname\f[R] that defines the class with +the \f[CR]public static void main(String[] args)\f[R] method that serves +as your application\(aqs starting point. +When you use \f[CR]\-jar\f[R], the specified JAR file is the source of +all user classes, and other class path settings are ignored. +If you\(aqre using JAR files, then see \f[B]jar\f[R]. +.TP +\f[CR]\-m\f[R] or \f[CR]\-\-module\f[R] \f[I]module\f[R][\f[CR]/\f[R]\f[I]mainclass\f[R]] +Executes the main class in a module specified by \f[I]mainclass\f[R] if +it is given, or, if it is not given, the value in the \f[I]module\f[R]. +In other words, \f[I]mainclass\f[R] can be used when it is not specified +by the module, or to override the value when it is specified. +.RS +See \f[B]Standard Options for Java\f[R]. +.RE +.TP +\f[I]source\-file\f[R] +Only used to launch a source\-file program. +Specifies the source file that contains the main class when using +source\-file mode. +See \f[B]Using Source\-File Mode to Launch Source\-Code Programs\f[R] +.TP +\f[I]args\f[R] ... +Optional: Arguments following \f[I]mainclass\f[R], +\f[I]source\-file\f[R], \f[CR]\-jar\f[R] \f[I]jarfile\f[R], and +\f[CR]\-m\f[R] or \f[CR]\-\-module\f[R] +\f[I]module\f[R]\f[CR]/\f[R]\f[I]mainclass\f[R] are passed as arguments +to the main class. +.SH DESCRIPTION +The \f[CR]java\f[R] command starts a Java application. +It does this by starting the Java Virtual Machine (JVM), loading the +specified class, and calling that class\(aqs \f[CR]main()\f[R] method. +The method must be declared \f[CR]public\f[R] and \f[CR]static\f[R], it +must not return any value, and it must accept a \f[CR]String\f[R] array +as a parameter. +The method declaration has the following form: +.RS +.PP +\f[CR]public static void main(String[] args)\f[R] +.RE +.PP +In source\-file mode, the \f[CR]java\f[R] command can launch a class +declared in a source file. +See \f[B]Using Source\-File Mode to Launch Source\-Code Programs\f[R] +for a description of using the source\-file mode. +.RS +.PP +\f[B]Note:\f[R] You can use the \f[CR]JDK_JAVA_OPTIONS\f[R] launcher +environment variable to prepend its content to the actual command line +of the \f[CR]java\f[R] launcher. +See \f[B]Using the JDK_JAVA_OPTIONS Launcher Environment Variable\f[R]. +.RE +.PP +By default, the first argument that isn\(aqt an option of the +\f[CR]java\f[R] command is the fully qualified name of the class to be +called. +If \f[CR]\-jar\f[R] is specified, then its argument is the name of the +JAR file containing class and resource files for the application. +The startup class must be indicated by the \f[CR]Main\-Class\f[R] +manifest header in its manifest file. +.PP +Arguments after the class file name or the JAR file name are passed to +the \f[CR]main()\f[R] method. +.SS \f[CR]javaw\f[R] +\f[B]Windows:\f[R] The \f[CR]javaw\f[R] command is identical to +\f[CR]java\f[R], except that with \f[CR]javaw\f[R] there\(aqs no +associated console window. +Use \f[CR]javaw\f[R] when you don\(aqt want a command prompt window to +appear. +The \f[CR]javaw\f[R] launcher will, however, display a dialog box with +error information if a launch fails. +.SH USING SOURCE\-FILE MODE TO LAUNCH SOURCE\-CODE PROGRAMS +To launch a class declared in a source file, run the \f[CR]java\f[R] +launcher in source\-file mode. +Entering source\-file mode is determined by two items on the +\f[CR]java\f[R] command line: +.IP \(bu 2 +The first item on the command line that is not an option or part of an +option. +In other words, the item in the command line that would otherwise be the +main class name. +.IP \(bu 2 +The \f[CR]\-\-source\f[R] \f[I]version\f[R] option, if present. +.PP +If the class identifies an existing file that has a \f[CR].java\f[R] +extension, or if the \f[CR]\-\-source\f[R] option is specified, then +source\-file mode is selected. +The source file is then compiled and run. +The \f[CR]\-\-source\f[R] option can be used to specify the source +\f[I]version\f[R] or \f[I]N\f[R] of the source code. +This determines the API that can be used. +When you set \f[CR]\-\-source\f[R] \f[I]N\f[R], you can only use the +public API that was defined in JDK \f[I]N\f[R]. +.RS +.PP +\f[B]Note:\f[R] The valid values of \f[I]N\f[R] change for each release, +with new values added and old values removed. +You\(aqll get an error message if you use a value of \f[I]N\f[R] that is +no longer supported. +The supported values of \f[I]N\f[R] are the current Java SE release +(\f[CR]25\f[R]) and a limited number of previous releases, detailed in +the command\-line help for \f[CR]javac\f[R], under the +\f[CR]\-\-source\f[R] and \f[CR]\-\-release\f[R] options. +.RE +.PP +If the file does not have the \f[CR].java\f[R] extension, the +\f[CR]\-\-source\f[R] option must be used to tell the \f[CR]java\f[R] +command to use the source\-file mode. +The \f[CR]\-\-source\f[R] option is used for cases when the source file +is a \(dqscript\(dq to be executed and the name of the source file does +not follow the normal naming conventions for Java source files. +.PP +In source\-file mode, the effect is as though the source file is +compiled into memory, and the first class found in the source file is +executed. +Any arguments placed after the name of the source file in the original +command line are passed to the compiled class when it is executed. +.PP +For example, if a file were named \f[CR]HelloWorld.java\f[R] and +contained a class named \f[CR]HelloWorld\f[R], then the source\-file +mode command to launch the class would be: +.RS +.PP +\f[CR]java HelloWorld.java\f[R] +.RE +.PP +This use of source\-file mode is informally equivalent to using the +following two commands: +.IP +.EX +javac \-d \-\-source\-path HelloWorld.java +java \-\-class\-path HelloWorld +.EE +.PP +where \f[CR]\f[R] is computed +.PP +\f[B]In source\-file mode, any additional command\-line options are +processed as follows:\f[R] +.IP \(bu 2 +The launcher scans the options specified before the source file for any +that are relevant in order to compile the source file. +.RS 2 +.PP +This includes: \f[CR]\-\-class\-path\f[R], \f[CR]\-\-module\-path\f[R], +\f[CR]\-\-add\-exports\f[R], \f[CR]\-\-add\-modules\f[R], +\f[CR]\-\-limit\-modules\f[R], \f[CR]\-\-patch\-module\f[R], +\f[CR]\-\-upgrade\-module\-path\f[R], and any variant forms of those +options. +It also includes the new \f[CR]\-\-enable\-preview\f[R] option, +described in JEP 12. +.RE +.IP \(bu 2 +No provision is made to pass any additional options to the compiler, +such as \f[CR]\-processor\f[R] or \f[CR]\-Werror\f[R]. +.IP \(bu 2 +Command\-line argument files (\f[CR]\(at\f[R]\-files) may be used in the +standard way. +Long lists of arguments for either the VM or the program being invoked +may be placed in files specified on the command\-line by prefixing the +filename with an \f[CR]\(at\f[R] character. +.PP +\f[B]In source\-file mode, compilation proceeds as follows:\f[R] +.IP \(bu 2 +Any command\-line options that are relevant to the compilation +environment are taken into account. +These include: +\f[CR]\-\-class\-path\f[R]/\f[CR]\-classpath\f[R]/\f[CR]\-cp\f[R], +\f[CR]\-\-module\-path\f[R]/\f[CR]\-p\f[R], \f[CR]\-\-add\-exports\f[R], +\f[CR]\-\-add\-modules\f[R], \f[CR]\-\-limit\-modules\f[R], +\f[CR]\-\-patch\-module\f[R], \f[CR]\-\-upgrade\-module\-path\f[R], +\f[CR]\-\-enable\-preview\f[R]. +.IP \(bu 2 +The root of the source tree, \f[CR]\f[R] is computed from +the package of the class being launched. +For example, if \f[CR]HelloWorld.java\f[R] declared its classes to be in +the \f[CR]hello\f[R] package, then the file \f[CR]HelloWorld.java\f[R] +is expected to reside in the directory \f[CR]somedir/hello/\f[R]. +In this case, \f[CR]somedir\f[R] is computed to be the root of the +source tree. +.IP \(bu 2 +The root of the source tree serves as the source\-path for compilation, +so that other source files found in that tree and are needed by +\f[CR]HelloWorld\f[R] could be compiled. +.IP \(bu 2 +Annotation processing is disabled, as if \f[CR]\-proc:none\f[R] is in +effect. +.IP \(bu 2 +If a version is specified, via the \f[CR]\-\-source\f[R] option, the +value is used as the argument for an implicit \f[CR]\-\-release\f[R] +option for the compilation. +This sets both the source version accepted by compiler and the system +API that may be used by the code in the source file. +.IP \(bu 2 +If \f[CR]\-\-enable\-preview\f[R] is specified, the +\f[CR]\-\-source N\f[R] arguments can be omitted. +If the Java runtime version is \f[CR]N\f[R], then +\f[CR]\-\-release N\f[R] is implied when compiling source files. +.IP \(bu 2 +If a \f[CR]module\-info.java\f[R] file exists in the +\f[CR]\f[R] directory, its module declaration is used to +define a named module that will contain all the classes compiled from +\f[CR].java\f[R] files in the source tree. +If \f[CR]module\-info.java\f[R] does not exist, all the classes compiled +from source files will be compiled in the context of the unnamed module. +.IP \(bu 2 +The source file that is launched should contain one or more top\-level +classes, the first of which is taken as the class to be executed. +.IP \(bu 2 +For the source file that is launched, the compiler does not enforce the +optional restriction defined at the end of JLS 7.6, that a type in a +named package should exist in a file whose name is composed from the +type name followed by the \f[CR].java\f[R] extension. +.IP \(bu 2 +If a source file contains errors, appropriate error messages are written +to the standard error stream, and the launcher exits with a non\-zero +exit code. +.PP +\f[B]In source\-file mode, execution proceeds as follows:\f[R] +.IP \(bu 2 +The class to be executed is the first top\-level class found in the +source file. +It must contain a declaration of an entry \f[CR]main\f[R] method. +.IP \(bu 2 +The compiled classes are loaded by a custom class loader, that delegates +to the application class loader. +This implies that classes appearing on the application class path cannot +refer to any classes declared in source files. +.IP \(bu 2 +If a \f[CR]module\-info.java\f[R] file exists in the +\f[CR]\f[R] directory, then all the classes compiled from +\f[CR].java\f[R] files in the source tree will be in that module, which +will serve as the root module for the execution of the program. +If \f[CR]module\-info.java\f[R] does not exist, the compiled classes are +executed in the context of an unnamed module, as though +\f[CR]\-\-add\-modules=ALL\-DEFAULT\f[R] is in effect. +This is in addition to any other \f[CR]\-\-add\-module\f[R] options that +may be have been specified on the command line. +.IP \(bu 2 +Any arguments appearing after the name of the file on the command line +are passed to the main method in the obvious way. +.IP \(bu 2 +It is an error if there is a class on the application class path whose +name is the same as that of the class to be executed. +.PP +See \f[B]JEP 458: Launch Multi\-File Source\-Code Programs\f[R] +[https://openjdk.org/jeps/458] for complete details. +.SH USING THE JDK_JAVA_OPTIONS LAUNCHER ENVIRONMENT VARIABLE +\f[CR]JDK_JAVA_OPTIONS\f[R] prepends its content to the options parsed +from the command line. +The content of the \f[CR]JDK_JAVA_OPTIONS\f[R] environment variable is a +list of arguments separated by white\-space characters (as determined by +\f[CR]isspace()\f[R]). +These are prepended to the command line arguments passed to +\f[CR]java\f[R] launcher. +The encoding requirement for the environment variable is the same as the +\f[CR]java\f[R] command line on the system. +\f[CR]JDK_JAVA_OPTIONS\f[R] environment variable content is treated in +the same manner as that specified in the command line. +.PP +Single (\f[CR]\(aq\f[R]) or double (\f[CR]\(dq\f[R]) quotes can be used +to enclose arguments that contain whitespace characters. +All content between the open quote and the first matching close quote +are preserved by simply removing the pair of quotes. +In case a matching quote is not found, the launcher will abort with an +error message. +\f[CR]\(at\f[R]\-files are supported as they are specified in the +command line. +Any wildcard literal \f[CR]*\f[R] in the \f[CR]JDK_JAVA_OPTIONS\f[R] +environment variable content isn\(aqt expanded and is passed as\-is to +the starting VM. +In order to mitigate potential misuse of \f[CR]JDK_JAVA_OPTIONS\f[R] +behavior, options that specify the main class (such as \f[CR]\-jar\f[R]) +or cause the \f[CR]java\f[R] launcher to exit without executing the main +class (such as \f[CR]\-h\f[R]) are disallowed in the environment +variable. +If any of these options appear in the environment variable, the launcher +will abort with an error message. +When \f[CR]JDK_JAVA_OPTIONS\f[R] is set, the launcher prints a message +to stderr as a reminder. +.PP +\f[B]Example:\f[R] +.IP +.EX +$ export JDK_JAVA_OPTIONS=\(aq\-g \(atfile1 \-Dprop=value \(atfile2 \-Dws.prop=\(dqwhite spaces\(dq\(aq +$ java \-Xint \(atfile3 +.EE +.PP +is equivalent to the command line: +.IP +.EX +java \-g \(atfile1 \-Dprop=value \(atfile2 \-Dws.prop=\(dqwhite spaces\(dq \-Xint \(atfile3 +.EE +.SH OVERVIEW OF JAVA OPTIONS +The \f[CR]java\f[R] command supports a wide range of options in the +following categories: +.IP \(bu 2 +\f[B]Standard Options for Java\f[R]: Options guaranteed to be supported +by all implementations of the Java Virtual Machine (JVM). +They\(aqre used for common actions, such as checking the version of the +JRE, setting the class path, enabling verbose output, and so on. +.IP \(bu 2 +\f[B]Extra Options for Java\f[R]: General purpose options that are +specific to the Java HotSpot Virtual Machine. +They aren\(aqt guaranteed to be supported by all JVM implementations, +and are subject to change. +These options start with \f[CR]\-X\f[R]. +.PP +The advanced options aren\(aqt recommended for casual use. +These are developer options used for tuning specific areas of the Java +HotSpot Virtual Machine operation that often have specific system +requirements and may require privileged access to system configuration +parameters. +Several examples of performance tuning are provided in \f[B]Performance +Tuning Examples\f[R]. +These options aren\(aqt guaranteed to be supported by all JVM +implementations and are subject to change. +Advanced options start with \f[CR]\-XX\f[R]. +.IP \(bu 2 +\f[B]Advanced Runtime Options for Java\f[R]: Control the runtime +behavior of the Java HotSpot VM. +.IP \(bu 2 +\f[B]Advanced JIT Compiler Options for java\f[R]: Control the dynamic +just\-in\-time (JIT) compilation performed by the Java HotSpot VM. +.IP \(bu 2 +\f[B]Advanced Serviceability Options for Java\f[R]: Enable gathering +system information and performing extensive debugging. +.IP \(bu 2 +\f[B]Advanced Garbage Collection Options for Java\f[R]: Control how +garbage collection (GC) is performed by the Java HotSpot +.PP +Boolean options are used to either enable a feature that\(aqs disabled +by default or disable a feature that\(aqs enabled by default. +Such options don\(aqt require a parameter. +Boolean \f[CR]\-XX\f[R] options are enabled using the plus sign +(\f[CR]\-XX:+\f[R]\f[I]OptionName\f[R]) and disabled using the minus +sign (\f[CR]\-XX:\-\f[R]\f[I]OptionName\f[R]). +.PP +For options that require an argument, the argument may be separated from +the option name by a space, a colon (:), or an equal sign (=), or the +argument may directly follow the option (the exact syntax differs for +each option). +If you\(aqre expected to specify the size in bytes, then you can use no +suffix, or use the suffix \f[CR]k\f[R] or \f[CR]K\f[R] for kilobytes +(KB), \f[CR]m\f[R] or \f[CR]M\f[R] for megabytes (MB), or \f[CR]g\f[R] +or \f[CR]G\f[R] for gigabytes (GB). +For example, to set the size to 8 GB, you can specify either +\f[CR]8g\f[R], \f[CR]8192m\f[R], \f[CR]8388608k\f[R], or +\f[CR]8589934592\f[R] as the argument. +If you are expected to specify the percentage, then use a number from 0 +to 1. +For example, specify \f[CR]0.25\f[R] for 25%. +.PP +The following sections describe the options that are deprecated, +obsolete, and removed: +.IP \(bu 2 +\f[B]Deprecated Java Options\f[R]: Accepted and acted upon \-\-\- a +warning is issued when they\(aqre used. +.IP \(bu 2 +\f[B]Obsolete Java Options\f[R]: Accepted but ignored \-\-\- a warning +is issued when they\(aqre used. +.IP \(bu 2 +\f[B]Removed Java Options\f[R]: Removed \-\-\- using them results in an +error. +.SH STANDARD OPTIONS FOR JAVA +These are the most commonly used options supported by all +implementations of the JVM. +.RS +.PP +\f[B]Note:\f[R] To specify an argument for a long option, you can use +either \f[CR]\-\-\f[R]\f[I]name\f[R]\f[CR]=\f[R]\f[I]value\f[R] or +\f[CR]\-\-\f[R]\f[I]name\f[R] \f[I]value\f[R]. +.RE +.TP +\f[CR]\-agentlib:\f[R]\f[I]libname\f[R][\f[CR]=\f[R]\f[I]options\f[R]] +Loads the specified native agent library. +After the library name, a comma\-separated list of options specific to +the library can be used. +If the option \f[CR]\-agentlib:foo\f[R] is specified, then the JVM +attempts to load the library named \f[CR]foo\f[R] using the platform +specific naming conventions and locations: +.RS +.IP \(bu 2 +\f[B]Linux and other POSIX\-like platforms:\f[R] The JVM attempts to +load the library named \f[CR]libfoo.so\f[R] in the location specified by +the \f[CR]LD_LIBRARY_PATH\f[R] system variable. +.IP \(bu 2 +\f[B]macOS:\f[R] The JVM attempts to load the library named +\f[CR]libfoo.dylib\f[R] in the location specified by the +\f[CR]DYLD_LIBRARY_PATH\f[R] system variable. +.IP \(bu 2 +\f[B]Windows:\f[R] The JVM attempts to load the library named +\f[CR]foo.dll\f[R] in the location specified by the \f[CR]PATH\f[R] +system variable. +.RS 2 +.PP +The following example shows how to load the Java Debug Wire Protocol +(JDWP) library and listen for the socket connection on port 8000, +suspending the JVM before the main class loads: +.RS +.PP +\f[CR]\-agentlib:jdwp=transport=dt_socket,server=y,address=8000\f[R] +.RE +.RE +.RE +.TP +\f[CR]\-agentpath:\f[R]\f[I]pathname\f[R][\f[CR]=\f[R]\f[I]options\f[R]] +Loads the native agent library specified by the absolute path name. +This option is equivalent to \f[CR]\-agentlib\f[R] but uses the full +path and file name of the library. +.TP +\f[CR]\-\-class\-path\f[R] \f[I]classpath\f[R], \f[CR]\-classpath\f[R] \f[I]classpath\f[R], or \f[CR]\-cp\f[R] \f[I]classpath\f[R] +Specifies a list of directories, JAR files, and ZIP archives to search +for class files. +.RS +On Windows, semicolons (\f[CR];\f[R]) separate entities in this list; on +other platforms it is a colon (\f[CR]:\f[R]). +Specifying \f[I]classpath\f[R] overrides any setting of the +\f[CR]CLASSPATH\f[R] environment variable. +If the class path option isn\(aqt used and \f[I]classpath\f[R] isn\(aqt +set, then the user class path consists of the current directory (.). +As a special convenience, a class path element that contains a base name +of an asterisk (*) is considered equivalent to specifying a list of all +the files in the directory with the extension \f[CR].jar\f[R] or +\f[CR].JAR\f[R] . +A Java program can\(aqt tell the difference between the two invocations. +For example, if the directory mydir contains \f[CR]a.jar\f[R] and +\f[CR]b.JAR\f[R], then the class path element mydir/* is expanded to +\f[CR]A.jar:b.JAR\f[R], except that the order of JAR files is +unspecified. +All \f[CR].jar\f[R] files in the specified directory, even hidden ones, +are included in the list. +A class path entry consisting of an asterisk (*) expands to a list of +all the jar files in the current directory. +The \f[CR]CLASSPATH\f[R] environment variable, where defined, is +similarly expanded. +Any class path wildcard expansion that occurs before the Java VM is +started. +Java programs never see wildcards that aren\(aqt expanded except by +querying the environment, such as by calling +\f[CR]System.getenv(\(dqCLASSPATH\(dq)\f[R]. +.RE +.TP +\f[CR]\-\-disable\-\(atfiles\f[R] +Can be used anywhere on the command line, including in an argument file, +to prevent further \f[CR]\(atfilename\f[R] expansion. +This option stops expanding \f[CR]\(at\f[R]\-argfiles after the option. +.TP +\f[CR]\-\-enable\-preview\f[R] +Allows classes to depend on \f[B]preview features\f[R] +[https://docs.oracle.com/en/java/javase/12/language/index.html#JSLAN\-GUID\-5A82FE0E\-0CA4\-4F1F\-B075\-564874FE2823] +of the release. +.TP +\f[CR]\-\-enable\-native\-access\f[R] \f[I]module\f[R][\f[CR],\f[R]\f[I]module\f[R]...] +Native access involves access to code or data outside the Java runtime. +This is generally unsafe and, if done incorrectly, might crash the JVM +or result in memory corruption. +Native access can occur as a result of calling a method that is either +\f[B]restricted\f[R] [https://openjdk.org/jeps/454#Safety], or +\f[CR]native\f[R]. +This option allows code in the specified modules to perform native +access. +Native access occurring in a module that has not been explicitly enabled +is deemed \f[I]illegal\f[R]. +.RS +\f[I]module\f[R] can be a module name, or \f[CR]ALL\-UNNAMED\f[R] to +indicate code on the class path. +.RE +.TP +\-\f[CR]\-\-illegal\-native\-access=\f[R]\f[I]parameter\f[R] +This option specifies a mode for how illegal native access is handled: +.RS +.RS +.PP +\f[B]Note:\f[R] This option will be removed in a future release. +.RE +.IP \(bu 2 +\f[CR]allow\f[R]: This mode allows illegal native access in all modules, +without any warings. +.IP \(bu 2 +\f[CR]warn\f[R]: This mode is identical to \f[CR]allow\f[R] except that +a warning message is issued for the first illegal native access found in +a module. +This mode is the default for the current JDK but will change in a future +release. +.IP \(bu 2 +\f[CR]deny\f[R]: This mode disables illegal native access. +That is, any illegal native access causes an +\f[CR]IllegalCallerException\f[R]. +This mode will become the default in a future release. +To verify that your application is ready for a future version of the +JDK, run it with \f[CR]\-\-illegal\-native\-access=deny\f[R] along with +any necessary \f[CR]\-\-enable\-native\-access\f[R] options. +.RE +.TP +\f[CR]\-\-finalization=\f[R]\f[I]value\f[R] +Controls whether the JVM performs finalization of objects. +Valid values are \(dqenabled\(dq and \(dqdisabled\(dq. +Finalization is enabled by default, so the value \(dqenabled\(dq does +nothing. +The value \(dqdisabled\(dq disables finalization, so that no finalizers +are invoked. +.TP +\f[CR]\-\-module\-path\f[R] \f[I]modulepath\f[R]... or \f[CR]\-p\f[R] \f[I]modulepath\f[R] +Specifies where to find application modules with a list of path +elements. +The elements of a module path can be a file path to a module or a +directory containing modules. +Each module is either a modular JAR or an exploded\-module directory. +.RS +On Windows, semicolons (\f[CR];\f[R]) separate path elements in this +list; on other platforms it is a colon (\f[CR]:\f[R]). +.RE +.TP +\f[CR]\-\-upgrade\-module\-path\f[R] \f[I]modulepath\f[R]... +Specifies where to find module replacements of upgradeable modules in +the runtime image with a list of path elements. +The elements of a module path can be a file path to a module or a +directory containing modules. +Each module is either a modular JAR or an exploded\-module directory. +.RS +On Windows, semicolons (\f[CR];\f[R]) separate path elements in this +list; on other platforms it is a colon (\f[CR]:\f[R]). +.RE +.TP +\f[CR]\-\-add\-modules\f[R] \f[I]module\f[R][\f[CR],\f[R]\f[I]module\f[R]...] +Specifies the root modules to resolve in addition to the initial module. +\f[I]module\f[R] can also be \f[CR]ALL\-DEFAULT\f[R], +\f[CR]ALL\-SYSTEM\f[R], and \f[CR]ALL\-MODULE\-PATH\f[R]. +.TP +\f[CR]\-\-list\-modules\f[R] +Lists the observable modules and then exits. +.TP +\f[CR]\-d\f[R] \f[I]module_name\f[R] or \f[CR]\-\-describe\-module\f[R] \f[I]module_name\f[R] +Describes a specified module and then exits. +.TP +\f[CR]\-\-dry\-run\f[R] +Creates the VM but doesn\(aqt execute the main method. +This \f[CR]\-\-dry\-run\f[R] option might be useful for validating the +command\-line options such as the module system configuration. +.TP +\f[CR]\-\-validate\-modules\f[R] +Validates all modules and exit. +This option is helpful for finding conflicts and other errors with +modules on the module path. +.TP +\f[CR]\-D\f[R]\f[I]property\f[R]\f[CR]=\f[R]\f[I]value\f[R] +Sets a system property value. +The \f[I]property\f[R] variable is a string with no spaces that +represents the name of the property. +The \f[I]value\f[R] variable is a string that represents the value of +the property. +If \f[I]value\f[R] is a string with spaces, then enclose it in quotation +marks (for example \f[CR]\-Dfoo=\(dqfoo bar\(dq\f[R]). +.TP +\f[CR]\-disableassertions\f[R][\f[CR]:\f[R][\f[I]packagename\f[R]]...|\f[CR]:\f[R]\f[I]classname\f[R]] or \f[CR]\-da\f[R][\f[CR]:\f[R][\f[I]packagename\f[R]]...|\f[CR]:\f[R]\f[I]classname\f[R]] +Disables assertions. +By default, assertions are disabled in all packages and classes. +With no arguments, \f[CR]\-disableassertions\f[R] (\f[CR]\-da\f[R]) +disables assertions in all packages and classes. +With the \f[I]packagename\f[R] argument ending in \f[CR]...\f[R], the +switch disables assertions in the specified package and any subpackages. +If the argument is simply \f[CR]...\f[R], then the switch disables +assertions in the unnamed package in the current working directory. +With the \f[I]classname\f[R] argument, the switch disables assertions in +the specified class. +.RS +The \f[CR]\-disableassertions\f[R] (\f[CR]\-da\f[R]) option applies to +all class loaders and to system classes (which don\(aqt have a class +loader). +There\(aqs one exception to this rule: If the option is provided with no +arguments, then it doesn\(aqt apply to system classes. +This makes it easy to disable assertions in all classes except for +system classes. +The \f[CR]\-disablesystemassertions\f[R] option enables you to disable +assertions in all system classes. +To explicitly enable assertions in specific packages or classes, use the +\f[CR]\-enableassertions\f[R] (\f[CR]\-ea\f[R]) option. +Both options can be used at the same time. +For example, to run the \f[CR]MyClass\f[R] application with assertions +enabled in the package \f[CR]com.wombat.fruitbat\f[R] (and any +subpackages) but disabled in the class +\f[CR]com.wombat.fruitbat.Brickbat\f[R], use the following command: +.RS +.PP +\f[CR]java \-ea:com.wombat.fruitbat... \-da:com.wombat.fruitbat.Brickbat MyClass\f[R] +.RE +.RE +.TP +\f[CR]\-disablesystemassertions\f[R] or \f[CR]\-dsa\f[R] +Disables assertions in all system classes. +.TP +\f[CR]\-enableassertions\f[R][\f[CR]:\f[R][\f[I]packagename\f[R]]...|\f[CR]:\f[R]\f[I]classname\f[R]] or \f[CR]\-ea\f[R][\f[CR]:\f[R][\f[I]packagename\f[R]]...|\f[CR]:\f[R]\f[I]classname\f[R]] +Enables assertions. +By default, assertions are disabled in all packages and classes. +With no arguments, \f[CR]\-enableassertions\f[R] (\f[CR]\-ea\f[R]) +enables assertions in all packages and classes. +With the \f[I]packagename\f[R] argument ending in \f[CR]...\f[R], the +switch enables assertions in the specified package and any subpackages. +If the argument is simply \f[CR]...\f[R], then the switch enables +assertions in the unnamed package in the current working directory. +With the \f[I]classname\f[R] argument, the switch enables assertions in +the specified class. +.RS +The \f[CR]\-enableassertions\f[R] (\f[CR]\-ea\f[R]) option applies to +all class loaders and to system classes (which don\(aqt have a class +loader). +There\(aqs one exception to this rule: If the option is provided with no +arguments, then it doesn\(aqt apply to system classes. +This makes it easy to enable assertions in all classes except for system +classes. +The \f[CR]\-enablesystemassertions\f[R] option provides a separate +switch to enable assertions in all system classes. +To explicitly disable assertions in specific packages or classes, use +the \f[CR]\-disableassertions\f[R] (\f[CR]\-da\f[R]) option. +If a single command contains multiple instances of these switches, then +they\(aqre processed in order, before loading any classes. +For example, to run the \f[CR]MyClass\f[R] application with assertions +enabled only in the package \f[CR]com.wombat.fruitbat\f[R] (and any +subpackages) but disabled in the class +\f[CR]com.wombat.fruitbat.Brickbat\f[R], use the following command: +.RS +.PP +\f[CR]java \-ea:com.wombat.fruitbat... \-da:com.wombat.fruitbat.Brickbat MyClass\f[R] +.RE +.RE +.TP +\f[CR]\-enablesystemassertions\f[R] or \f[CR]\-esa\f[R] +Enables assertions in all system classes. +.TP +\f[CR]\-help\f[R], \f[CR]\-h\f[R], or \f[CR]\-?\f[R] +Prints the help message to the error stream. +.TP +\f[CR]\-\-help\f[R] +Prints the help message to the output stream. +.TP +\f[CR]\-javaagent:\f[R]\f[I]jarpath\f[R][\f[CR]=\f[R]\f[I]options\f[R]] +Loads the specified Java programming language agent. +See \f[CR]java.lang.instrument\f[R]. +.TP +\f[CR]\-\-show\-version\f[R] +Prints the product version to the output stream and continues. +.TP +\f[CR]\-showversion\f[R] +Prints the product version to the error stream and continues. +.TP +\f[CR]\-\-show\-module\-resolution\f[R] +Shows module resolution output during startup. +.TP +\f[CR]\-splash:\f[R]\f[I]imagepath\f[R] +Shows the splash screen with the image specified by \f[I]imagepath\f[R]. +HiDPI scaled images are automatically supported and used if available. +The unscaled image file name, such as \f[CR]image.ext\f[R], should +always be passed as the argument to the \f[CR]\-splash\f[R] option. +The most appropriate scaled image provided is picked up automatically. +.RS +For example, to show the \f[CR]splash.gif\f[R] file from the +\f[CR]images\f[R] directory when starting your application, use the +following option: +.RS +.PP +\f[CR]\-splash:images/splash.gif\f[R] +.RE +See the SplashScreen API documentation for more information. +.RE +.TP +\f[CR]\-verbose:class\f[R] +Displays information about each loaded class. +.TP +\f[CR]\-verbose:gc\f[R] +Displays information about each garbage collection (GC) event. +.TP +\f[CR]\-verbose:jni\f[R] +Displays information about the use of native methods and other Java +Native Interface (JNI) activity. +.TP +\f[CR]\-verbose:module\f[R] +Displays information about the modules in use. +.TP +\f[CR]\-\-version\f[R] +Prints product version to the output stream and exits. +.TP +\f[CR]\-version\f[R] +Prints product version to the error stream and exits. +.TP +\f[CR]\-X\f[R] +Prints the help on extra options to the error stream. +.TP +\f[CR]\-\-help\-extra\f[R] +Prints the help on extra options to the output stream. +.TP +\f[CR]\(at\f[R]\f[I]argfile\f[R] +Specifies one or more argument files prefixed by \f[CR]\(at\f[R] used by +the \f[CR]java\f[R] command. +It isn\(aqt uncommon for the \f[CR]java\f[R] command line to be very +long because of the \f[CR].jar\f[R] files needed in the classpath. +The \f[CR]\(at\f[R]\f[I]argfile\f[R] option overcomes command\-line +length limitations by enabling the launcher to expand the contents of +argument files after shell expansion, but before argument processing. +Contents in the argument files are expanded because otherwise, they +would be specified on the command line until the +\f[CR]\-\-disable\-\(atfiles\f[R] option was encountered. +.RS +The argument files can also contain the main class name and all options. +If an argument file contains all of the options required by the +\f[CR]java\f[R] command, then the command line could simply be: +.RS +.PP +\f[CR]java \(at\f[R]\f[I]argfile\f[R] +.RE +See \f[B]java Command\-Line Argument Files\f[R] for a description and +examples of using \f[CR]\(at\f[R]\-argfiles. +.RE +.SH EXTRA OPTIONS FOR JAVA +The following \f[CR]java\f[R] options are general purpose options that +are specific to the Java HotSpot Virtual Machine. +.TP +\f[CR]\-Xbatch\f[R] +Disables background compilation. +By default, the JVM compiles the method as a background task, running +the method in interpreter mode until the background compilation is +finished. +The \f[CR]\-Xbatch\f[R] flag disables background compilation so that +compilation of all methods proceeds as a foreground task until +completed. +This option is equivalent to \f[CR]\-XX:\-BackgroundCompilation\f[R]. +.TP +\f[CR]\-Xbootclasspath/a:\f[R]\f[I]directories\f[R]|\f[I]zip\f[R]|\f[I]JAR\-files\f[R] +Specifies a list of directories, JAR files, and ZIP archives to append +to the end of the default bootstrap class path. +.RS +On Windows, semicolons (\f[CR];\f[R]) separate entities in this list; on +other platforms it is a colon (\f[CR]:\f[R]). +.RE +.TP +\f[CR]\-Xcheck:jni\f[R] +Performs additional checks for Java Native Interface (JNI) functions. +.RS +The following checks are considered indicative of significant problems +with the native code, and the JVM terminates with an irrecoverable error +in such cases: +.IP \(bu 2 +The thread doing the call is not attached to the JVM. +.IP \(bu 2 +The thread doing the call is using the \f[CR]JNIEnv\f[R] belonging to +another thread. +.IP \(bu 2 +A parameter validation check fails: +.RS 2 +.IP \(bu 2 +A \f[CR]jfieldID\f[R], or \f[CR]jmethodID\f[R], is detected as being +invalid. +For example: +.RS 2 +.IP \(bu 2 +Of the wrong type +.IP \(bu 2 +Associated with the wrong class +.RE +.IP \(bu 2 +A parameter of the wrong type is detected. +.IP \(bu 2 +An invalid parameter value is detected. +For example: +.RS 2 +.IP \(bu 2 +NULL where not permitted +.IP \(bu 2 +An out\-of\-bounds array index, or frame capacity +.IP \(bu 2 +A non\-UTF\-8 string +.IP \(bu 2 +An invalid JNI reference +.IP \(bu 2 +An attempt to use a \f[CR]ReleaseXXX\f[R] function on a parameter not +produced by the corresponding \f[CR]GetXXX\f[R] function +.RE +.RE +The following checks only result in warnings being printed: +.IP \(bu 2 +A JNI call was made without checking for a pending exception from a +previous JNI call, and the current call is not safe when an exception +may be pending. +.IP \(bu 2 +A class descriptor is in decorated format (\f[CR]Lname;\f[R]) when it +should not be. +.IP \(bu 2 +A \f[CR]NULL\f[R] parameter is allowed, but its use is questionable. +.IP \(bu 2 +Calling other JNI functions in the scope of +\f[CR]Get/ReleasePrimitiveArrayCritical\f[R] or +\f[CR]Get/ReleaseStringCritical\f[R] +Expect a performance degradation when this option is used. +.RE +.TP +\f[CR]\-Xcomp\f[R] +Testing mode to exercise JIT compilers. +This option should not be used in production environments. +.TP +\f[CR]\-Xdebug\f[R] +Does nothing; deprecated for removal in a future release. +.TP +\f[CR]\-Xdiag\f[R] +Shows additional diagnostic messages. +.TP +\f[CR]\-Xint\f[R] +Runs the application in interpreted\-only mode. +Compilation to native code is disabled, and all bytecode is executed by +the interpreter. +The performance benefits offered by the just\-in\-time (JIT) compiler +aren\(aqt present in this mode. +.TP +\f[CR]\-Xinternalversion\f[R] +Displays more detailed JVM version information than the +\f[CR]\-version\f[R] option, and then exits. +.TP +\f[CR]\-Xlog:\f[R]\f[I]option\f[R] +Configure or enable logging with the Java Virtual Machine (JVM) unified +logging framework. +See \f[B]Enable Logging with the JVM Unified Logging Framework\f[R]. +.TP +\f[CR]\-Xmixed\f[R] +Executes all bytecode by the interpreter except for hot methods, which +are compiled to native code. +On by default. +Use \f[CR]\-Xint\f[R] to switch off. +.TP +\f[CR]\-Xmn\f[R] \f[I]size\f[R] +Sets the initial and maximum size (in bytes) of the heap for the young +generation (nursery) in the generational collectors. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +The young generation region of the heap is used for new objects. +GC is performed in this region more often than in other regions. +If the size for the young generation is too small, then a lot of minor +garbage collections are performed. +If the size is too large, then only full garbage collections are +performed, which can take a long time to complete. +It is recommended that you do not set the size for the young generation +for the G1 collector, and keep the size for the young generation greater +than 25% and less than 50% of the overall heap size for other +collectors. +The following examples show how to set the initial and maximum size of +young generation to 256 MB using various units: +.RS +.IP +.EX +\-Xmn256m +\-Xmn262144k +\-Xmn268435456 +.EE +Instead of the \f[CR]\-Xmn\f[R] option to set both the initial and +maximum size of the heap for the young generation, you can use +\f[CR]\-XX:NewSize\f[R] to set the initial size and +\f[CR]\-XX:MaxNewSize\f[R] to set the maximum size. +.RE +.TP +\f[CR]\-Xms\f[R] \f[I]size\f[R] +Sets the minimum and the initial size (in bytes) of the heap. +This value must be a multiple of 1024 and greater than 1 MB. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +The following examples show how to set the size of allocated memory to 6 +MB using various units: +.RS +.IP +.EX +\-Xms6291456 +\-Xms6144k +\-Xms6m +.EE +If you do not set this option, then the initial size will be set as the +sum of the sizes allocated for the old generation and the young +generation. +The initial size of the heap for the young generation can be set using +the \f[CR]\-Xmn\f[R] option or the \f[CR]\-XX:NewSize\f[R] option. +Note that the \f[CR]\-XX:InitialHeapSize\f[R] option can also be used to +set the initial heap size. +If it appears after \f[CR]\-Xms\f[R] on the command line, then the +initial heap size gets set to the value specified with +\f[CR]\-XX:InitialHeapSize\f[R]. +.RE +.TP +\f[CR]\-Xmx\f[R] \f[I]size\f[R] +Specifies the maximum size (in bytes) of the heap. +This value must be a multiple of 1024 and greater than 2 MB. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +The default value is chosen at runtime based on system configuration. +For server deployments, \f[CR]\-Xms\f[R] and \f[CR]\-Xmx\f[R] are often +set to the same value. +The following examples show how to set the maximum allowed size of +allocated memory to 80 MB using various units: +.RS +.IP +.EX +\-Xmx83886080 +\-Xmx81920k +\-Xmx80m +.EE +The \f[CR]\-Xmx\f[R] option is equivalent to +\f[CR]\-XX:MaxHeapSize\f[R]. +.RE +.TP +\f[CR]\-Xnoclassgc\f[R] +Disables garbage collection (GC) of classes. +This can save some GC time, which shortens interruptions during the +application run. +When you specify \f[CR]\-Xnoclassgc\f[R] at startup, the class objects +in the application are left untouched during GC and are always be +considered live. +This can result in more memory being permanently occupied which, if not +used carefully, throws an out\-of\-memory exception. +.TP +\f[CR]\-Xrs\f[R] +Reduces the use of operating system signals by the JVM. +Shutdown hooks enable the orderly shutdown of a Java application by +running user cleanup code (such as closing database connections) at +shutdown, even if the JVM terminates abruptly. +.RS +.IP \(bu 2 +\f[B]Non\-Windows:\f[R] +.RS 2 +.IP \(bu 2 +The JVM catches signals to implement shutdown hooks for unexpected +termination. +The JVM uses \f[CR]SIGHUP\f[R], \f[CR]SIGINT\f[R], and +\f[CR]SIGTERM\f[R] to initiate the running of shutdown hooks. +.IP \(bu 2 +Applications embedding the JVM frequently need to trap signals such as +\f[CR]SIGINT\f[R] or \f[CR]SIGTERM\f[R], which can lead to interference +with the JVM signal handlers. +The \f[CR]\-Xrs\f[R] option is available to address this issue. +When \f[CR]\-Xrs\f[R] is used, the signal masks for \f[CR]SIGINT\f[R], +\f[CR]SIGTERM\f[R], \f[CR]SIGHUP\f[R], and \f[CR]SIGQUIT\f[R] aren\(aqt +changed by the JVM, and signal handlers for these signals aren\(aqt +installed. +.RE +.IP \(bu 2 +\f[B]Windows:\f[R] +.RS 2 +.IP \(bu 2 +The JVM watches for console control events to implement shutdown hooks +for unexpected termination. +Specifically, the JVM registers a console control handler that begins +shutdown\-hook processing and returns \f[CR]TRUE\f[R] for +\f[CR]CTRL_C_EVENT\f[R], \f[CR]CTRL_CLOSE_EVENT\f[R], +\f[CR]CTRL_LOGOFF_EVENT\f[R], and \f[CR]CTRL_SHUTDOWN_EVENT\f[R]. +.IP \(bu 2 +The JVM uses a similar mechanism to implement the feature of dumping +thread stacks for debugging purposes. +The JVM uses \f[CR]CTRL_BREAK_EVENT\f[R] to perform thread dumps. +.IP \(bu 2 +If the JVM is run as a service (for example, as a servlet engine for a +web server), then it can receive \f[CR]CTRL_LOGOFF_EVENT\f[R] but +shouldn\(aqt initiate shutdown because the operating system doesn\(aqt +actually terminate the process. +To avoid possible interference such as this, the \f[CR]\-Xrs\f[R] option +can be used. +When the \f[CR]\-Xrs\f[R] option is used, the JVM doesn\(aqt install a +console control handler, implying that it doesn\(aqt watch for or +process \f[CR]CTRL_C_EVENT\f[R], \f[CR]CTRL_CLOSE_EVENT\f[R], +\f[CR]CTRL_LOGOFF_EVENT\f[R], or \f[CR]CTRL_SHUTDOWN_EVENT\f[R]. +.RE +There are two consequences of specifying \f[CR]\-Xrs\f[R]: +.IP \(bu 2 +\f[B]Non\-Windows:\f[R] \f[CR]SIGQUIT\f[R] thread dumps aren\(aqt +available. +.IP \(bu 2 +\f[B]Windows:\f[R] Ctrl + Break thread dumps aren\(aqt available. +User code is responsible for causing shutdown hooks to run, for example, +by calling \f[CR]System.exit()\f[R] when the JVM is to be terminated. +.RE +.TP +\f[CR]\-Xshare:\f[R]\f[I]mode\f[R] +Sets the class data sharing (CDS) mode. +.RS +Possible \f[I]mode\f[R] arguments for this option include the following: +.TP +\f[CR]auto\f[R] +Use shared class data if possible (default). +.TP +\f[CR]on\f[R] +Require using shared class data, otherwise fail. +.RS +.PP +\f[B]Note:\f[R] The \f[CR]\-Xshare:on\f[R] option is used for testing +purposes only. +It may cause the VM to unexpectedly exit during start\-up when the CDS +archive cannot be used (for example, when certain VM parameters are +changed, or when a different JDK is used). +This option should not be used in production environments. +.RE +.TP +\f[CR]off\f[R] +Do not attempt to use shared class data. +.RE +.TP +\f[CR]\-XshowSettings\f[R] +Shows all settings and then continues. +.TP +\f[CR]\-XshowSettings:\f[R]\f[I]category\f[R] +Shows settings and continues. +Possible \f[I]category\f[R] arguments for this option include the +following: +.RS +.TP +\f[CR]all\f[R] +Shows all categories of settings in \f[B]verbose\f[R] detail. +.TP +\f[CR]locale\f[R] +Shows settings related to locale. +.TP +\f[CR]properties\f[R] +Shows settings related to system properties. +.TP +\f[CR]security\f[R] +Shows all settings related to security. +.RS +sub\-category arguments for \f[CR]security\f[R] include the following: +.IP \(bu 2 +\f[CR]security:all\f[R] : shows all security settings +.IP \(bu 2 +\f[CR]security:properties\f[R] : shows security properties +.IP \(bu 2 +\f[CR]security:providers\f[R] : shows static security provider settings +.IP \(bu 2 +\f[CR]security:tls\f[R] : shows TLS related security settings +.RE +.TP +\f[CR]vm\f[R] +Shows the settings of the JVM. +.TP +\f[CR]system\f[R] +\f[B]Linux only:\f[R] Shows host system or container configuration and +continues. +.RE +.TP +\f[CR]\-Xss\f[R] \f[I]size\f[R] +Sets the thread stack size (in bytes). +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate KB, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate MB, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate GB. +The actual size may be rounded up to a multiple of the system page size +as required by the operating system. +The default value depends on the platform. +For example: +.RS +.IP \(bu 2 +Linux/x64: 1024 KB +.IP \(bu 2 +Linux/Aarch64: 2048 KB +.IP \(bu 2 +macOS/x64: 1024 KB +.IP \(bu 2 +macOS/Aarch64: 2048 KB +.IP \(bu 2 +Windows: The default value depends on virtual memory +The following examples set the thread stack size to 1024 KB in different +units: +.IP +.EX +\-Xss1m +\-Xss1024k +\-Xss1048576 +.EE +This option is similar to \f[CR]\-XX:ThreadStackSize\f[R]. +.RE +.TP +\f[CR]\-\-add\-reads\f[R] \f[I]module\f[R]\f[CR]=\f[R]\f[I]target\-module\f[R](\f[CR],\f[R]\f[I]target\-module\f[R])* +Updates \f[I]module\f[R] to read the \f[I]target\-module\f[R], +regardless of the module declaration. +\f[I]target\-module\f[R] can be \f[CR]ALL\-UNNAMED\f[R] to read all +unnamed modules. +.TP +\f[CR]\-\-add\-exports\f[R] \f[I]module\f[R]\f[CR]/\f[R]\f[I]package\f[R]\f[CR]=\f[R]\f[I]target\-module\f[R](\f[CR],\f[R]\f[I]target\-module\f[R])* +Updates \f[I]module\f[R] to export \f[I]package\f[R] to +\f[I]target\-module\f[R], regardless of module declaration. +\f[I]target\-module\f[R] can be \f[CR]ALL\-UNNAMED\f[R] to export to all +unnamed modules. +.TP +\f[CR]\-\-add\-opens\f[R] \f[I]module\f[R]\f[CR]/\f[R]\f[I]package\f[R]\f[CR]=\f[R]\f[I]target\-module\f[R](\f[CR],\f[R]\f[I]target\-module\f[R])* +Updates \f[I]module\f[R] to open \f[I]package\f[R] to +\f[I]target\-module\f[R], regardless of module declaration. +.TP +\f[CR]\-\-limit\-modules\f[R] \f[I]module\f[R][\f[CR],\f[R]\f[I]module\f[R]...] +Specifies the limit of the universe of observable modules. +.TP +\f[CR]\-\-patch\-module\f[R] \f[I]module\f[R]\f[CR]=\f[R]\f[I]file\f[R](\f[CR];\f[R]\f[I]file\f[R])* +Overrides or augments a module with classes and resources in JAR files +or directories. +.TP +\f[CR]\-\-source\f[R] \f[I]version\f[R] +Sets the version of the source in source\-file mode. +.TP +\f[CR]\-\-sun\-misc\-unsafe\-memory\-access=\f[R] \f[I]value\f[R] +Allow or deny usage of unsupported API \f[CR]sun.misc.Unsafe\f[R]. +\f[I]value\f[R] is one of: +.RS +.TP +\f[CR]allow\f[R] +Allow use of the memory\-access methods with no warnings at run time. +.TP +\f[CR]warn\f[R] +Allow use of the memory\-access methods, but issues a warning on the +first occasion that any memory\-access method is used. +At most one warning is issued. +.TP +\f[CR]debug\f[R] +Allow use of the memory\-access methods, but issue a one\-line warning +and a stack trace when any memory\-access method is used. +.TP +\f[CR]deny\f[R] +Disallow use of the memory\-access methods by throwing an +\f[CR]UnsupportedOperationException\f[R] on every usage. +The default value when the option is not specified is \f[CR]warn\f[R]. +.RE +.SH EXTRA OPTIONS FOR MACOS +The following extra options are macOS specific. +.TP +\f[CR]\-XstartOnFirstThread\f[R] +Runs the \f[CR]main()\f[R] method on the first (AppKit) thread. +.TP +\f[CR]\-Xdock:name=\f[R]\f[I]application_name\f[R] +Overrides the default application name displayed in dock. +.TP +\f[CR]\-Xdock:icon=\f[R]\f[I]path_to_icon_file\f[R] +Overrides the default icon displayed in dock. +.SH ADVANCED OPTIONS FOR JAVA +These \f[CR]java\f[R] options can be used to enable other advanced +options. +.TP +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R] +Unlocks the options intended for diagnosing the JVM. +By default, this option is disabled and diagnostic options aren\(aqt +available. +.RS +Command line options that are enabled with the use of this option are +not supported. +If you encounter issues while using any of these options, it is very +likely that you will be required to reproduce the problem without using +any of these unsupported options before Oracle Support can assist with +an investigation. +It is also possible that any of these options may be removed or their +behavior changed without any warning. +.RE +.TP +\f[CR]\-XX:+UnlockExperimentalVMOptions\f[R] +Unlocks the options that provide experimental features in the JVM. +By default, this option is disabled and experimental features aren\(aqt +available. +.SH ADVANCED RUNTIME OPTIONS FOR JAVA +These \f[CR]java\f[R] options control the runtime behavior of the Java +HotSpot VM. +.TP +\f[CR]\-XX:ActiveProcessorCount=\f[R]\f[I]x\f[R] +Overrides the number of CPUs that the VM will use to calculate the size +of thread pools it will use for various operations such as Garbage +Collection and ForkJoinPool. +.RS +The VM normally determines the number of available processors from the +operating system. +This flag can be useful for partitioning CPU resources when running +multiple Java processes in docker containers. +This flag is honored even if \f[CR]UseContainerSupport\f[R] is not +enabled. +See \f[CR]\-XX:\-UseContainerSupport\f[R] for a description of enabling +and disabling container support. +.RE +.TP +\f[CR]\-XX:AllocateHeapAt=\f[R]\f[I]path\f[R] +Takes a path to the file system and uses memory mapping to allocate the +object heap on the memory device. +Using this option enables the HotSpot VM to allocate the Java object +heap on an alternative memory device, such as an NV\-DIMM, specified by +the user. +.RS +Alternative memory devices that have the same semantics as DRAM, +including the semantics of atomic operations, can be used instead of +DRAM for the object heap without changing the existing application code. +All other memory structures (such as the code heap, metaspace, and +thread stacks) continue to reside in DRAM. +Some operating systems expose non\-DRAM memory through the file system. +Memory\-mapped files in these file systems bypass the page cache and +provide a direct mapping of virtual memory to the physical memory on the +device. +The existing heap related flags (such as \f[CR]\-Xmx\f[R] and +\f[CR]\-Xms\f[R]) and garbage\-collection related flags continue to work +as before. +.RE +.TP +\f[CR]\-XX:\-CompactStrings\f[R] +Disables the Compact Strings feature. +By default, this option is enabled. +When this option is enabled, Java Strings containing only single\-byte +characters are internally represented and stored as +single\-byte\-per\-character Strings using ISO\-8859\-1 / Latin\-1 +encoding. +This reduces, by 50%, the amount of space required for Strings +containing only single\-byte characters. +For Java Strings containing at least one multibyte character: these are +represented and stored as 2 bytes per character using UTF\-16 encoding. +Disabling the Compact Strings feature forces the use of UTF\-16 encoding +as the internal representation for all Java Strings. +.RS +Cases where it may be beneficial to disable Compact Strings include the +following: +.IP \(bu 2 +When it\(aqs known that an application overwhelmingly will be allocating +multibyte character Strings +.IP \(bu 2 +In the unexpected event where a performance regression is observed in +migrating from Java SE 8 to Java SE 9 and an analysis shows that Compact +Strings introduces the regression +In both of these scenarios, disabling Compact Strings makes sense. +.RE +.TP +\f[CR]\-XX:ErrorFile=\f[R]\f[I]filename\f[R] +Specifies the path and file name to which error data is written when an +irrecoverable error occurs. +By default, this file is created in the current working directory and +named \f[CR]hs_err_pid\f[R]\f[I]pid\f[R]\f[CR].log\f[R] where +\f[I]pid\f[R] is the identifier of the process that encountered the +error. +.RS +The following example shows how to set the default log file (note that +the identifier of the process is specified as \f[CR]%p\f[R]): +.RS +.PP +\f[CR]\-XX:ErrorFile=./hs_err_pid%p.log\f[R] +.RE +.IP \(bu 2 +\f[B]Non\-Windows:\f[R] The following example shows how to set the error +log to \f[CR]/var/log/java/java_error.log\f[R]: +.RS 2 +.RS +.PP +\f[CR]\-XX:ErrorFile=/var/log/java/java_error.log\f[R] +.RE +.RE +.IP \(bu 2 +\f[B]Windows:\f[R] The following example shows how to set the error log +file to \f[CR]C:/log/java/java_error.log\f[R]: +.RS 2 +.RS +.PP +\f[CR]\-XX:ErrorFile=C:/log/java/java_error.log\f[R] +.RE +.RE +If the file exists, and is writeable, then it will be overwritten. +Otherwise, if the file can\(aqt be created in the specified directory +(due to insufficient space, permission problem, or another issue), then +the file is created in the temporary directory for the operating system: +.IP \(bu 2 +\f[B]Non\-Windows:\f[R] The temporary directory is \f[CR]/tmp\f[R]. +.IP \(bu 2 +\f[B]Windows:\f[R] The temporary directory is specified by the value of +the \f[CR]TMP\f[R] environment variable; if that environment variable +isn\(aqt defined, then the value of the \f[CR]TEMP\f[R] environment +variable is used. +.RE +.TP +\f[CR]\-XX:+ExtensiveErrorReports\f[R] +Enables the reporting of more extensive error information in the +\f[CR]ErrorFile\f[R]. +This option can be turned on in environments where maximal information +is desired \- even if the resulting logs may be quite large and/or +contain information that might be considered sensitive. +The information can vary from release to release, and across different +platforms. +By default this option is disabled. +.TP +\f[CR]\-XX:FlightRecorderOptions=\f[R]\f[I]parameter\f[R]\f[CR]=\f[R]\f[I]value\f[R] (or) \f[CR]\-XX:FlightRecorderOptions:\f[R]\f[I]parameter\f[R]\f[CR]=\f[R]\f[I]value\f[R] +Sets the parameters that control the behavior of JFR. +Multiple parameters can be specified by separating them with a comma. +.RS +The following list contains the available JFR +\f[I]parameter\f[R]\f[CR]=\f[R]\f[I]value\f[R] entries: +.TP +\f[CR]globalbuffersize=\f[R]\f[I]size\f[R] +Specifies the total amount of primary memory used for data retention. +The default value is based on the value specified for +\f[CR]memorysize\f[R]. +Change the \f[CR]memorysize\f[R] parameter to alter the size of global +buffers. +.TP +\f[CR]maxchunksize=\f[R]\f[I]size\f[R] +Specifies the maximum size (in bytes) of the data chunks in a recording. +Append \f[CR]m\f[R] or \f[CR]M\f[R] to specify the size in megabytes +(MB), or \f[CR]g\f[R] or \f[CR]G\f[R] to specify the size in gigabytes +(GB). +By default, the maximum size of data chunks is set to 12 MB. +The minimum allowed is 1 MB. +.TP +\f[CR]memorysize=\f[R]\f[I]size\f[R] +Determines how much buffer memory should be used, and sets the +\f[CR]globalbuffersize\f[R] and \f[CR]numglobalbuffers\f[R] parameters +based on the size specified. +Append \f[CR]m\f[R] or \f[CR]M\f[R] to specify the size in megabytes +(MB), or \f[CR]g\f[R] or \f[CR]G\f[R] to specify the size in gigabytes +(GB). +By default, the memory size is set to 10 MB. +.TP +\f[CR]numglobalbuffers\f[R] +Specifies the number of global buffers used. +The default value is based on the memory size specified. +Change the \f[CR]memorysize\f[R] parameter to alter the number of global +buffers. +.TP +\f[CR]old\-object\-queue\-size=number\-of\-objects\f[R] +Maximum number of old objects to track. +By default, the number of objects is set to 256. +.TP +\f[CR]preserve\-repository=\f[R]{\f[CR]true\f[R]|\f[CR]false\f[R]} +Specifies whether files stored in the disk repository should be kept +after the JVM has exited. +If false, files are deleted. +By default, this parameter is disabled. +.TP +\f[CR]repository=\f[R]\f[I]path\f[R] +Specifies the repository (a directory) for temporary disk storage. +By default, the system\(aqs temporary directory is used. +.TP +\f[CR]retransform=\f[R]{\f[CR]true\f[R]|\f[CR]false\f[R]} +Specifies whether event classes should be retransformed using JVMTI. +If false, instrumentation is added when event classes are loaded. +By default, this parameter is enabled. +.TP +\f[CR]stackdepth=\f[R]\f[I]depth\f[R] +Stack depth for stack traces. +By default, the depth is set to 64 method calls. +The maximum is 2048. +Values greater than 64 could create significant overhead and reduce +performance. +.TP +\f[CR]threadbuffersize=\f[R]\f[I]size\f[R] +Specifies the per\-thread local buffer size (in bytes). +By default, the local buffer size is set to 8 kilobytes, with a minimum +value of 4 kilobytes. +Overriding this parameter could reduce performance and is not +recommended. +.RE +.TP +\f[CR]\-XX:LargePageSizeInBytes=\f[R]\f[I]size\f[R] +Sets the maximum large page size (in bytes) used by the JVM. +The \f[I]size\f[R] argument must be a valid page size supported by the +environment to have any effect. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +By default, the size is set to 0, meaning that the JVM will use the +default large page size for the environment as the maximum size for +large pages. +See \f[B]Large Pages\f[R]. +.RS +The following example describes how to set the large page size to 1 +gigabyte (GB): +.RS +.PP +\f[CR]\-XX:LargePageSizeInBytes=1g\f[R] +.RE +.RE +.TP +\f[CR]\-XX:MaxDirectMemorySize=\f[R]\f[I]size\f[R] +Sets the maximum total size (in bytes) of the \f[CR]java.nio\f[R] +package, direct\-buffer allocations. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +If not set, the flag is ignored and the JVM chooses the size for NIO +direct\-buffer allocations automatically. +.RS +The following examples illustrate how to set the NIO size to 1024 KB in +different units: +.IP +.EX +\-XX:MaxDirectMemorySize=1m +\-XX:MaxDirectMemorySize=1024k +\-XX:MaxDirectMemorySize=1048576 +.EE +.RE +.TP +\f[CR]\-XX:\-MaxFDLimit\f[R] +Disables the attempt to set the soft limit for the number of open file +descriptors to the hard limit. +By default, this option is enabled on all platforms, but is ignored on +Windows. +The only time that you may need to disable this is on macOS, where its +use imposes a maximum of 10240, which is lower than the actual system +maximum. +.TP +\f[CR]\-XX:NativeMemoryTracking=\f[R]\f[I]mode\f[R] +Specifies the mode for tracking JVM native memory usage. +Possible \f[I]mode\f[R] arguments for this option include the following: +.RS +.TP +\f[CR]off\f[R] +Instructs not to track JVM native memory usage. +This is the default behavior if you don\(aqt specify the +\f[CR]\-XX:NativeMemoryTracking\f[R] option. +.TP +\f[CR]summary\f[R] +Tracks memory usage only by JVM subsystems, such as Java heap, class, +code, and thread. +.TP +\f[CR]detail\f[R] +In addition to tracking memory usage by JVM subsystems, track memory +usage by individual \f[CR]CallSite\f[R], individual virtual memory +region and its committed regions. +.RE +.TP +\f[CR]\-XX:TrimNativeHeapInterval=\f[R]\f[I]millis\f[R] +Interval, in ms, at which the JVM will trim the native heap. +Lower values will reclaim memory more eagerly at the cost of higher +overhead. +A value of 0 (default) disables native heap trimming. +Native heap trimming is performed in a dedicated thread. +.RS +This option is only supported on Linux with GNU C Library (glibc). +.RE +.TP +\f[CR]\-XX:+NeverActAsServerClassMachine\f[R] +Enable the \(dqClient VM emulation\(dq mode which only uses the C1 JIT +compiler, a 32Mb CodeCache and the Serial GC. +The maximum amount of memory that the JVM may use (controlled by the +\f[CR]\-XX:MaxRAM=n\f[R] flag) is set to 1GB by default. +The string \(dqemulated\-client\(dq is added to the JVM version string. +.RS +By default the flag is set to \f[CR]true\f[R] only on Windows in 32\-bit +mode and \f[CR]false\f[R] in all other cases. +The \(dqClient VM emulation\(dq mode will not be enabled if any of the +following flags are used on the command line: +.IP +.EX +\-XX:{+|\-}TieredCompilation +\-XX:CompilationMode=mode +\-XX:TieredStopAtLevel=n +\-XX:{+|\-}EnableJVMCI +\-XX:{+|\-}UseJVMCICompiler +.EE +.RE +.TP +\f[CR]\-XX:ObjectAlignmentInBytes=\f[R]\f[I]alignment\f[R] +Sets the memory alignment of Java objects (in bytes). +By default, the value is set to 8 bytes. +The specified value should be a power of 2, and must be within the range +of 8 and 256 (inclusive). +This option makes it possible to use compressed pointers with large Java +heap sizes. +.RS +The heap size limit in bytes is calculated as: +.RS +.PP +\f[CR]4GB * ObjectAlignmentInBytes\f[R] +.RE +.RS +.PP +\f[B]Note:\f[R] As the alignment value increases, the unused space +between objects also increases. +As a result, you may not realize any benefits from using compressed +pointers with large Java heap sizes. +.RE +.RE +.TP +\f[CR]\-XX:OnError=\f[R]\f[I]string\f[R] +Sets a custom command or a series of semicolon\-separated commands to +run when an irrecoverable error occurs. +If the string contains spaces, then it must be enclosed in quotation +marks. +.RS +.IP \(bu 2 +\f[B]Non\-Windows:\f[R] The following example shows how the +\f[CR]\-XX:OnError\f[R] option can be used to run the \f[CR]gcore\f[R] +command to create a core image, and start the \f[CR]gdb\f[R] debugger to +attach to the process in case of an irrecoverable error (the +\f[CR]%p\f[R] designates the current process identifier): +.RS 2 +.RS +.PP +\f[CR]\-XX:OnError=\(dqgcore %p;gdb \-p %p\(dq\f[R] +.RE +.RE +.IP \(bu 2 +\f[B]Windows:\f[R] The following example shows how the +\f[CR]\-XX:OnError\f[R] option can be used to run the +\f[CR]userdump.exe\f[R] utility to obtain a crash dump in case of an +irrecoverable error (the \f[CR]%p\f[R] designates the current process +identifier). +This example assumes that the path to the \f[CR]userdump.exe\f[R] +utility is specified in the \f[CR]PATH\f[R] environment variable: +.RS 2 +.RS +.PP +\f[CR]\-XX:OnError=\(dquserdump.exe %p\(dq\f[R] +.RE +.RE +.RE +.TP +\f[CR]\-XX:OnOutOfMemoryError=\f[R]\f[I]string\f[R] +Sets a custom command or a series of semicolon\-separated commands to +run when an \f[CR]OutOfMemoryError\f[R] exception is first thrown by the +JVM. +If the string contains spaces, then it must be enclosed in quotation +marks. +For an example of a command string, see the description of the +\f[CR]\-XX:OnError\f[R] option. +This applies only to \f[CR]OutOfMemoryError\f[R] exceptions caused by +Java Heap exhaustion; it does not apply to \f[CR]OutOfMemoryError\f[R] +exceptions thrown directly from Java code, nor by the JVM for other +types of resource exhaustion (such as native thread creation errors). +.TP +\f[CR]\-XX:+PrintCommandLineFlags\f[R] +Enables printing of ergonomically selected JVM flags that appeared on +the command line. +It can be useful to know the ergonomic values set by the JVM, such as +the heap space size and the selected garbage collector. +By default, this option is disabled and flags aren\(aqt printed. +.TP +\f[CR]\-XX:+PreserveFramePointer\f[R] +Selects between using the RBP register as a general purpose register +(\f[CR]\-XX:\-PreserveFramePointer\f[R]) and using the RBP register to +hold the frame pointer of the currently executing method +(\f[CR]\-XX:+PreserveFramePointer\f[R]). +If the frame pointer is available, then external profiling tools (for +example, Linux perf) can construct more accurate stack traces. +.TP +\f[CR]\-XX:+PrintNMTStatistics\f[R] +Enables printing of collected native memory tracking data at JVM exit +when native memory tracking is enabled (see +\f[CR]\-XX:NativeMemoryTracking\f[R]). +By default, this option is disabled and native memory tracking data +isn\(aqt printed. +.TP +\f[CR]\-XX:SharedArchiveFile=\f[R]\f[I]path\f[R] +Specifies the path and name of the class data sharing (CDS) archive file +.RS +See \f[B]Application Class Data Sharing\f[R]. +.RE +.TP +\f[CR]\-XX:+VerifySharedSpaces\f[R] +If this option is specified, the JVM will load a CDS archive file only +if it passes an integrity check based on CRC32 checksums. +The purpose of this flag is to check for unintentional damage to CDS +archive files in transmission or storage. +To guarantee the security and proper operation of CDS, the user must +ensure that the CDS archive files used by Java applications cannot be +modified without proper authorization. +.TP +\f[CR]\-XX:SharedArchiveConfigFile=\f[R]\f[I]shared_config_file\f[R] +Specifies additional shared data added to the archive file. +.TP +\f[CR]\-XX:SharedClassListFile=\f[R]\f[I]file_name\f[R] +Specifies the text file that contains the names of the classes to store +in the class data sharing (CDS) archive. +This file contains the full name of one class per line, except slashes +(\f[CR]/\f[R]) replace dots (\f[CR].\f[R]). +For example, to specify the classes \f[CR]java.lang.Object\f[R] and +\f[CR]hello.Main\f[R], create a text file that contains the following +two lines: +.RS +.IP +.EX +java/lang/Object +hello/Main +.EE +The classes that you specify in this text file should include the +classes that are commonly used by the application. +They may include any classes from the application, extension, or +bootstrap class paths. +See \f[B]Application Class Data Sharing\f[R]. +.RE +.TP +\f[CR]\-XX:+ShowCodeDetailsInExceptionMessages\f[R] +Enables printing of improved \f[CR]NullPointerException\f[R] messages. +When an application throws a \f[CR]NullPointerException\f[R], the option +enables the JVM to analyze the program\(aqs bytecode instructions to +determine precisely which reference is \f[CR]null\f[R], and describes +the source with a null\-detail message. +The null\-detail message is calculated and returned by +\f[CR]NullPointerException.getMessage()\f[R], and will be printed as the +exception message along with the method, filename, and line number. +By default, this option is enabled. +.TP +\f[CR]\-XX:+ShowMessageBoxOnError\f[R] +Enables the display of a dialog box when the JVM experiences an +irrecoverable error. +This prevents the JVM from exiting and keeps the process active so that +you can attach a debugger to it to investigate the cause of the error. +By default, this option is disabled. +.TP +\f[CR]\-XX:StartFlightRecording:\f[R]\f[I]parameter\f[R]\f[CR]=\f[R]\f[I]value\f[R] +Starts a JFR recording for the Java application. +This option is equivalent to the \f[CR]JFR.start\f[R] diagnostic command +that starts a recording during runtime. +\f[CR]\-XX:StartFlightRecording:help\f[R] prints available options and +example command lines. +You can set the following \f[I]parameter\f[R]\f[CR]=\f[R]\f[I]value\f[R] +entries when starting a JFR recording: +.RS +.TP +\f[CR]delay=\f[R]\f[I]time\f[R] +Specifies the delay between the Java application launch time and the +start of the recording. +Append \f[CR]s\f[R] to specify the time in seconds, \f[CR]m\f[R] for +minutes, \f[CR]h\f[R] for hours, or \f[CR]d\f[R] for days (for example, +specifying \f[CR]10m\f[R] means 10 minutes). +By default, there\(aqs no delay, and this parameter is set to 0. +.TP +\f[CR]disk=\f[R]{\f[CR]true\f[R]|\f[CR]false\f[R]} +Specifies whether to write data to disk while recording. +By default, this parameter is enabled. +.TP +\f[CR]dumponexit=\f[R]{\f[CR]true\f[R]|\f[CR]false\f[R]} +Specifies if the running recording is dumped when the JVM shuts down. +If enabled and a \f[CR]filename\f[R] is not entered, the recording is +written to a file in the directory where the process was started. +The file name is a system\-generated name that contains the process ID, +recording ID, and current timestamp, similar to +\f[CR]hotspot\-pid\-47496\-id\-1\-2018_01_25_19_10_41.jfr\f[R]. +By default, this parameter is disabled. +.TP +\f[CR]duration=\f[R]\f[I]time\f[R] +Specifies the duration of the recording. +Append \f[CR]s\f[R] to specify the time in seconds, \f[CR]m\f[R] for +minutes, \f[CR]h\f[R] for hours, or \f[CR]d\f[R] for days (for example, +specifying \f[CR]5h\f[R] means 5 hours). +By default, the duration isn\(aqt limited, and this parameter is set to +0. +.TP +\f[CR]filename=\f[R]\f[I]path\f[R] +Specifies the path and name of the file to which the recording is +written when the recording is stopped, for example: +.RS +.IP \(bu 2 +\f[CR]recording.jfr\f[R] +.IP \(bu 2 +\f[CR]/home/user/recordings/recording.jfr\f[R] +.IP \(bu 2 +\f[CR]c:\(rsrecordings\(rsrecording.jfr\f[R] +If %p and/or %t is specified in the filename, it expands to the JVM\(aqs +PID and the current timestamp, respectively. +The filename may also be a directory in which case, the filename is +generated from the PID and the current date in the specified directory. +.RE +.TP +\f[CR]name=\f[R]\f[I]identifier\f[R] +Takes both the name and the identifier of a recording. +.TP +\f[CR]maxage=\f[R]\f[I]time\f[R] +Specifies the maximum age of disk data to keep for the recording. +This parameter is valid only when the \f[CR]disk\f[R] parameter is set +to \f[CR]true\f[R]. +Append \f[CR]s\f[R] to specify the time in seconds, \f[CR]m\f[R] for +minutes, \f[CR]h\f[R] for hours, or \f[CR]d\f[R] for days (for example, +specifying \f[CR]30s\f[R] means 30 seconds). +By default, the maximum age isn\(aqt limited, and this parameter is set +to \f[CR]0s\f[R]. +.TP +\f[CR]maxsize=\f[R]\f[I]size\f[R] +Specifies the maximum size (in bytes) of disk data to keep for the +recording. +This parameter is valid only when the \f[CR]disk\f[R] parameter is set +to \f[CR]true\f[R]. +The value must not be less than the value for the +\f[CR]maxchunksize\f[R] parameter set with +\f[CR]\-XX:FlightRecorderOptions\f[R]. +Append \f[CR]m\f[R] or \f[CR]M\f[R] to specify the size in megabytes, or +\f[CR]g\f[R] or \f[CR]G\f[R] to specify the size in gigabytes. +By default, the maximum size of disk data isn\(aqt limited, and this +parameter is set to \f[CR]0\f[R]. +.TP +\f[CR]path\-to\-gc\-roots=\f[R]{\f[CR]true\f[R]|\f[CR]false\f[R]} +Specifies whether to collect the path to garbage collection (GC) roots +at the end of a recording. +By default, this parameter is disabled. +.RS +The path to GC roots is useful for finding memory leaks, but collecting +it is time\-consuming. +Enable this option only when you start a recording for an application +that you suspect has a memory leak. +If the \f[CR]settings\f[R] parameter is set to \f[CR]profile\f[R], the +stack trace from where the potential leaking object was allocated is +included in the information collected. +.RE +.TP +\f[CR]report\-on\-exit=\f[R]\f[I]identifier\f[R] +Specifies the name of the view to display when the Java Virtual Machine +(JVM) shuts down. +To specify more than one view, use the report\-on\-exit parameter +repeatedly. +This option is not available if the disk option is set to false. +For a list of available views, see \f[CR]jfr help view\f[R]. +By default, no report is generated. +.TP +\f[CR]settings=\f[R]\f[I]path\f[R] +Specifies the path and name of the event settings file (of type JFC). +By default, the \f[CR]default.jfc\f[R] file is used, which is located in +\f[CR]JAVA_HOME/lib/jfr\f[R]. +This default settings file collects a predefined set of information with +low overhead, so it has minimal impact on performance and can be used +with recordings that run continuously. +.RS +A second settings file is also provided, profile.jfc, which provides +more data than the default configuration, but can have more overhead and +impact performance. +Use this configuration for short periods of time when more information +is needed. +.RE +You can specify values for multiple parameters by separating them with a +comma. +Event settings and .jfc options can be specified using the following +syntax: +.TP +\f[CR]option=\f[R]\f[I]value\f[R] +Specifies the option value to modify. +To list available options, use the \f[CR]JAVA_HOME\f[R]/bin/jfr tool. +.TP +\f[CR]event\-setting=\f[R]\f[I]value\f[R] +Specifies the event setting value to modify. +Use the form: \f[CR]#=\f[R]. +To add a new event setting, prefix the event name with \(aq+\(aq. +You can specify values for multiple event settings and .jfc options by +separating them with a comma. +In case of a conflict between a parameter and a .jfc option, the +parameter will take precedence. +The whitespace delimiter can be omitted for timespan values, i.e. +20ms. +For more information about the settings syntax, see Javadoc of the +jdk.jfr package. +To only see warnings and errors from JFR during startup set +\-Xlog:jfr+startup=warning. +.RE +.TP +\f[CR]\-XX:ThreadStackSize=\f[R]\f[I]size\f[R] +Sets the Java thread stack size (in kilobytes). +Use of a scaling suffix, such as \f[CR]k\f[R], results in the scaling of +the kilobytes value so that \f[CR]\-XX:ThreadStackSize=1k\f[R] sets the +Java thread stack size to 1024*1024 bytes or 1 megabyte. +The default value depends on the platform. +For example: +.RS +.IP \(bu 2 +Linux/x64: 1024 KB +.IP \(bu 2 +Linux/Aarch64: 2048 KB +.IP \(bu 2 +macOS/x64: 1024 KB +.IP \(bu 2 +macOS/Aarch64: 2048 KB +.IP \(bu 2 +Windows: The default value depends on virtual memory +The following examples show how to set the thread stack size to 1 +megabyte in different units: +.IP +.EX +\-XX:ThreadStackSize=1k +\-XX:ThreadStackSize=1024 +.EE +This option is similar to \f[CR]\-Xss\f[R]. +.RE +.TP +\f[CR]\-XX:+UseCompactObjectHeaders\f[R] +Enables compact object headers. +By default, this option is disabled. +Enabling this option reduces memory footprint in the Java heap by 4 +bytes per object (on average) and often improves performance. +.RS +The feature remains disabled by default while it continues to be +evaluated. +In a future release it is expected to be enabled by default, and +eventually will be the only mode of operation. +.RE +.TP +\f[CR]\-XX:\-UseCompressedOops\f[R] +Disables the use of compressed pointers. +By default, this option is enabled, and compressed pointers are used. +This will automatically limit the maximum ergonomically determined Java +heap size to the maximum amount of memory that can be covered by +compressed pointers. +By default this range is 32 GB. +.RS +With compressed oops enabled, object references are represented as +32\-bit offsets instead of 64\-bit pointers, which typically increases +performance when running the application with Java heap sizes smaller +than the compressed oops pointer range. +This option works only for 64\-bit JVMs. +It\(aqs possible to use compressed pointers with Java heap sizes greater +than 32 GB. +See the \f[CR]\-XX:ObjectAlignmentInBytes\f[R] option. +.RE +.TP +\f[CR]\-XX:\-UseContainerSupport\f[R] +\f[B]Linux only:\f[R] The VM now provides automatic container detection +support, which allows the VM to determine the amount of memory and +number of processors that are available to a Java process running in +docker containers. +It uses this information to allocate system resources. +The default for this flag is \f[CR]true\f[R], and container support is +enabled by default. +It can be disabled with \f[CR]\-XX:\-UseContainerSupport\f[R]. +.RS +Unified Logging is available to help to diagnose issues related to this +support. +Use \f[CR]\-Xlog:os+container=trace\f[R] for maximum logging of +container information. +See \f[B]Enable Logging with the JVM Unified Logging Framework\f[R] for +a description of using Unified Logging. +.RE +.TP +\f[CR]\-XX:+UseLargePages\f[R] +Enables the use of large page memory. +By default, this option is disabled and large page memory isn\(aqt used. +.RS +See \f[B]Large Pages\f[R]. +.RE +.TP +\f[CR]\-XX:+UseTransparentHugePages\f[R] +\f[B]Linux only:\f[R] Enables the use of large pages that can +dynamically grow or shrink. +This option is disabled by default. +You may encounter performance problems with transparent huge pages as +the OS moves other pages around to create huge pages; this option is +made available for experimentation. +.TP +\f[CR]\-XX:+AllowUserSignalHandlers\f[R] +\f[B]Non\-Windows:\f[R] Enables installation of signal handlers by the +application. +By default, this option is disabled and the application isn\(aqt allowed +to install signal handlers. +.TP +\f[CR]\-XX:VMOptionsFile=\f[R]\f[I]filename\f[R] +Allows user to specify VM options in a file, for example, +\f[CR]java \-XX:VMOptionsFile=/var/my_vm_options HelloWorld\f[R]. +.TP +\f[CR]\-XX:UseBranchProtection=\f[R]\f[I]mode\f[R] +\f[B]Linux AArch64 only:\f[R] Specifies the branch protection mode. +All options other than \f[CR]none\f[R] require the VM to have been built +with branch protection enabled. +In addition, for full protection, any native libraries provided by +applications should be compiled with the same level of protection. +.RS +Possible \f[I]mode\f[R] arguments for this option include the following: +.TP +\f[CR]none\f[R] +Do not use branch protection. +This is the default value. +.TP +\f[CR]standard\f[R] +Enables all branch protection modes available on the current platform. +.TP +\f[CR]pac\-ret\f[R] +Enables protection against ROP based attacks. +(AArch64 8.3+ only) +.RE +.SH ADVANCED JIT COMPILER OPTIONS FOR JAVA +These \f[CR]java\f[R] options control the dynamic just\-in\-time (JIT) +compilation performed by the Java HotSpot VM. +.TP +\f[CR]\-XX:AllocateInstancePrefetchLines=\f[R]\f[I]lines\f[R] +Sets the number of lines to prefetch ahead of the instance allocation +pointer. +By default, the number of lines to prefetch is set to 1: +.RS +.RS +.PP +\f[CR]\-XX:AllocateInstancePrefetchLines=1\f[R] +.RE +.RE +.TP +\f[CR]\-XX:AllocatePrefetchDistance=\f[R]\f[I]size\f[R] +Sets the size (in bytes) of the prefetch distance for object allocation. +Memory about to be written with the value of new objects is prefetched +up to this distance starting from the address of the last allocated +object. +Each Java thread has its own allocation point. +.RS +Negative values denote that prefetch distance is chosen based on the +platform. +Positive values are bytes to prefetch. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +The default value is set to \-1. +The following example shows how to set the prefetch distance to 1024 +bytes: +.RS +.PP +\f[CR]\-XX:AllocatePrefetchDistance=1024\f[R] +.RE +.RE +.TP +\f[CR]\-XX:AllocatePrefetchInstr=\f[R]\f[I]instruction\f[R] +Sets the prefetch instruction to prefetch ahead of the allocation +pointer. +Possible values are from 0 to 3. +The actual instructions behind the values depend on the platform. +By default, the prefetch instruction is set to 0: +.RS +.RS +.PP +\f[CR]\-XX:AllocatePrefetchInstr=0\f[R] +.RE +.RE +.TP +\f[CR]\-XX:AllocatePrefetchLines=\f[R]\f[I]lines\f[R] +Sets the number of cache lines to load after the last object allocation +by using the prefetch instructions generated in compiled code. +The default value is 1 if the last allocated object was an instance, and +3 if it was an array. +.RS +The following example shows how to set the number of loaded cache lines +to 5: +.RS +.PP +\f[CR]\-XX:AllocatePrefetchLines=5\f[R] +.RE +.RE +.TP +\f[CR]\-XX:AllocatePrefetchStepSize=\f[R]\f[I]size\f[R] +Sets the step size (in bytes) for sequential prefetch instructions. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +By default, the step size is set to 16 bytes: +.RS +.RS +.PP +\f[CR]\-XX:AllocatePrefetchStepSize=16\f[R] +.RE +.RE +.TP +\f[CR]\-XX:AllocatePrefetchStyle=\f[R]\f[I]style\f[R] +Sets the generated code style for prefetch instructions. +The \f[I]style\f[R] argument is an integer from 0 to 3: +.RS +.TP +\f[CR]0\f[R] +Don\(aqt generate prefetch instructions. +.TP +\f[CR]1\f[R] +Execute prefetch instructions after each allocation. +This is the default setting. +.TP +\f[CR]2\f[R] +Use the thread\-local allocation block (TLAB) watermark pointer to +determine when prefetch instructions are executed. +.TP +\f[CR]3\f[R] +Generate one prefetch instruction per cache line. +.RE +.TP +\f[CR]\-XX:+BackgroundCompilation\f[R] +Enables background compilation. +This option is enabled by default. +To disable background compilation, specify +\f[CR]\-XX:\-BackgroundCompilation\f[R] (this is equivalent to +specifying \f[CR]\-Xbatch\f[R]). +.TP +\f[CR]\-XX:CICompilerCount=\f[R]\f[I]threads\f[R] +Sets the number of compiler threads to use for compilation. +By default, the number of compiler threads is selected automatically +depending on the number of CPUs and memory available for compiled code. +The following example shows how to set the number of threads to 2: +.RS +.RS +.PP +\f[CR]\-XX:CICompilerCount=2\f[R] +.RE +.RE +.TP +\f[CR]\-XX:+UseDynamicNumberOfCompilerThreads\f[R] +Dynamically create compiler thread up to the limit specified by +\f[CR]\-XX:CICompilerCount\f[R]. +This option is enabled by default. +.TP +\f[CR]\-XX:CompileCommand=\f[R]\f[I]command\f[R]\f[CR],\f[R]\f[I]method\f[R][\f[CR],\f[R]\f[I]option\f[R]] +Specifies a \f[I]command\f[R] to perform on a \f[I]method\f[R]. +For example, to exclude the \f[CR]indexOf()\f[R] method of the +\f[CR]String\f[R] class from being compiled, use the following: +.RS +.RS +.PP +\f[CR]\-XX:CompileCommand=exclude,java/lang/String.indexOf\f[R] +.RE +Note that the full class name is specified, including all packages and +subpackages separated by a slash (\f[CR]/\f[R]). +For easier cut\-and\-paste operations, it\(aqs also possible to use the +method name format produced by the \f[CR]\-XX:+PrintCompilation\f[R] and +\f[CR]\-XX:+LogCompilation\f[R] options: +.RS +.PP +\f[CR]\-XX:CompileCommand=exclude,java.lang.String::indexOf\f[R] +.RE +If the method is specified without the signature, then the command is +applied to all methods with the specified name. +However, you can also specify the signature of the method in the class +file format. +In this case, you should enclose the arguments in quotation marks, +because otherwise the shell treats the semicolon as a command end. +For example, if you want to exclude only the \f[CR]indexOf(String)\f[R] +method of the \f[CR]String\f[R] class from being compiled, use the +following: +.RS +.PP +\f[CR]\-XX:CompileCommand=\(dqexclude,java/lang/String.indexOf,(Ljava/lang/String;)I\(dq\f[R] +.RE +You can also use the asterisk (*) as a wildcard for class and method +names. +For example, to exclude all \f[CR]indexOf()\f[R] methods in all classes +from being compiled, use the following: +.RS +.PP +\f[CR]\-XX:CompileCommand=exclude,*.indexOf\f[R] +.RE +The commas and periods are aliases for spaces, making it easier to pass +compiler commands through a shell. +You can pass arguments to \f[CR]\-XX:CompileCommand\f[R] using spaces as +separators by enclosing the argument in quotation marks: +.RS +.PP +\f[CR]\-XX:CompileCommand=\(dqexclude java/lang/String indexOf\(dq\f[R] +.RE +Note that after parsing the commands passed on the command line using +the \f[CR]\-XX:CompileCommand\f[R] options, the JIT compiler then reads +commands from the \f[CR].hotspot_compiler\f[R] file. +You can add commands to this file or specify a different file using the +\f[CR]\-XX:CompileCommandFile\f[R] option. +To add several commands, either specify the +\f[CR]\-XX:CompileCommand\f[R] option multiple times, or separate each +argument with the new line separator (\f[CR]\(rsn\f[R]). +The following commands are available: +.TP +\f[CR]break\f[R] +Sets a breakpoint when debugging the JVM to stop at the beginning of +compilation of the specified method. +.TP +\f[CR]compileonly\f[R] +Excludes all methods from compilation except for the specified method. +As an alternative, you can use the \f[CR]\-XX:CompileOnly\f[R] option, +which lets you specify several methods. +.TP +\f[CR]dontinline\f[R] +Prevents inlining of the specified method. +.TP +\f[CR]exclude\f[R] +Excludes the specified method from compilation. +.TP +\f[CR]help\f[R] +Prints a help message for the \f[CR]\-XX:CompileCommand\f[R] option. +.TP +\f[CR]inline\f[R] +Attempts to inline the specified method. +.TP +\f[CR]log\f[R] +Excludes compilation logging (with the \f[CR]\-XX:+LogCompilation\f[R] +option) for all methods except for the specified method. +By default, logging is performed for all compiled methods. +.TP +\f[CR]option\f[R] +Passes a JIT compilation option to the specified method in place of the +last argument (\f[CR]option\f[R]). +The compilation option is set at the end, after the method name. +For example, to enable the \f[CR]BlockLayoutByFrequency\f[R] option for +the \f[CR]append()\f[R] method of the \f[CR]StringBuffer\f[R] class, use +the following: +.RS +.RS +.PP +\f[CR]\-XX:CompileCommand=option,java/lang/StringBuffer.append,BlockLayoutByFrequency\f[R] +.RE +You can specify multiple compilation options, separated by commas or +spaces. +.RE +.TP +\f[CR]print\f[R] +Prints generated assembler code after compilation of the specified +method. +.TP +\f[CR]quiet\f[R] +Instructs not to print the compile commands. +By default, the commands that you specify with the +\f[CR]\-XX:CompileCommand\f[R] option are printed; for example, if you +exclude from compilation the \f[CR]indexOf()\f[R] method of the +\f[CR]String\f[R] class, then the following is printed to standard +output: +.RS +.RS +.PP +\f[CR]CompilerOracle: exclude java/lang/String.indexOf\f[R] +.RE +You can suppress this by specifying the +\f[CR]\-XX:CompileCommand=quiet\f[R] option before other +\f[CR]\-XX:CompileCommand\f[R] options. +.RE +.RE +.TP +\f[CR]\-XX:CompileCommandFile=\f[R]\f[I]filename\f[R] +Sets the file from which JIT compiler commands are read. +By default, the \f[CR].hotspot_compiler\f[R] file is used to store +commands performed by the JIT compiler. +.RS +Each line in the command file represents a command, a class name, and a +method name for which the command is used. +For example, this line prints assembly code for the +\f[CR]toString()\f[R] method of the \f[CR]String\f[R] class: +.RS +.PP +\f[CR]print java/lang/String toString\f[R] +.RE +If you\(aqre using commands for the JIT compiler to perform on methods, +then see the \f[CR]\-XX:CompileCommand\f[R] option. +.RE +.TP +\f[CR]\-XX:CompilerDirectivesFile=\f[R]\f[I]file\f[R] +Adds directives from a file to the directives stack when a program +starts. +See \f[B]Compiler Control\f[R] +[https://docs.oracle.com/en/java/javase/12/vm/compiler\-control1.html#GUID\-94AD8194\-786A\-4F19\-BFFF\-278F8E237F3A]. +.RS +The \f[CR]\-XX:CompilerDirectivesFile\f[R] option has to be used +together with the \f[CR]\-XX:UnlockDiagnosticVMOptions\f[R] option that +unlocks diagnostic JVM options. +.RE +.TP +\f[CR]\-XX:+CompilerDirectivesPrint\f[R] +Prints the directives stack when the program starts or when a new +directive is added. +.RS +The \f[CR]\-XX:+CompilerDirectivesPrint\f[R] option has to be used +together with the \f[CR]\-XX:UnlockDiagnosticVMOptions\f[R] option that +unlocks diagnostic JVM options. +.RE +.TP +\f[CR]\-XX:CompileOnly=\f[R]\f[I]methods\f[R] +Sets the list of methods (separated by commas) to which compilation +should be restricted. +Only the specified methods are compiled. +.RS +\f[CR]\-XX:CompileOnly=method1,method2,...,methodN\f[R] is an alias for: +.IP +.EX +\-XX:CompileCommand=compileonly,method1 +\-XX:CompileCommand=compileonly,method2 +\&... +\-XX:CompileCommand=compileonly,methodN +.EE +.RE +.TP +\f[CR]\-XX:CompileThresholdScaling=\f[R]\f[I]scale\f[R] +Provides unified control of first compilation. +This option controls when methods are first compiled for both the tiered +and the nontiered modes of operation. +The \f[CR]CompileThresholdScaling\f[R] option has a floating point value +between 0 and +Inf and scales the thresholds corresponding to the +current mode of operation (both tiered and nontiered). +Setting \f[CR]CompileThresholdScaling\f[R] to a value less than 1.0 +results in earlier compilation while values greater than 1.0 delay +compilation. +Setting \f[CR]CompileThresholdScaling\f[R] to 0 is equivalent to +disabling compilation. +.TP +\f[CR]\-XX:+DoEscapeAnalysis\f[R] +Enables the use of escape analysis. +This option is enabled by default. +To disable the use of escape analysis, specify +\f[CR]\-XX:\-DoEscapeAnalysis\f[R]. +.TP +\f[CR]\-XX:InitialCodeCacheSize=\f[R]\f[I]size\f[R] +Sets the initial code cache size (in bytes). +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +The default value depends on the platform. +The initial code cache size shouldn\(aqt be less than the system\(aqs +minimal memory page size. +The following example shows how to set the initial code cache size to 32 +KB: +.RS +.RS +.PP +\f[CR]\-XX:InitialCodeCacheSize=32k\f[R] +.RE +.RE +.TP +\f[CR]\-XX:+Inline\f[R] +Enables method inlining. +This option is enabled by default to increase performance. +To disable method inlining, specify \f[CR]\-XX:\-Inline\f[R]. +.TP +\f[CR]\-XX:InlineSmallCode=\f[R]\f[I]size\f[R] +Sets the maximum code size (in bytes) for already compiled methods that +may be inlined. +This flag only applies to the C2 compiler. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +The default value depends on the platform and on whether tiered +compilation is enabled. +In the following example it is set to 1000 bytes: +.RS +.RS +.PP +\f[CR]\-XX:InlineSmallCode=1000\f[R] +.RE +.RE +.TP +\f[CR]\-XX:+LogCompilation\f[R] +Enables logging of compilation activity to a file named +\f[CR]hotspot.log\f[R] in the current working directory. +You can specify a different log file path and name using the +\f[CR]\-XX:LogFile\f[R] option. +.RS +By default, this option is disabled and compilation activity isn\(aqt +logged. +The \f[CR]\-XX:+LogCompilation\f[R] option has to be used together with +the \f[CR]\-XX:UnlockDiagnosticVMOptions\f[R] option that unlocks +diagnostic JVM options. +You can enable verbose diagnostic output with a message printed to the +console every time a method is compiled by using the +\f[CR]\-XX:+PrintCompilation\f[R] option. +.RE +.TP +\f[CR]\-XX:FreqInlineSize=\f[R]\f[I]size\f[R] +Sets the maximum bytecode size (in bytes) of a hot method to be inlined. +This flag only applies to the C2 compiler. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +The default value depends on the platform. +In the following example it is set to 325 bytes: +.RS +.RS +.PP +\f[CR]\-XX:FreqInlineSize=325\f[R] +.RE +.RE +.TP +\f[CR]\-XX:MaxInlineSize=\f[R]\f[I]size\f[R] +Sets the maximum bytecode size (in bytes) of a cold method to be +inlined. +This flag only applies to the C2 compiler. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +By default, the maximum bytecode size is set to 35 bytes: +.RS +.RS +.PP +\f[CR]\-XX:MaxInlineSize=35\f[R] +.RE +.RE +.TP +\f[CR]\-XX:C1MaxInlineSize=\f[R]\f[I]size\f[R] +Sets the maximum bytecode size (in bytes) of a cold method to be +inlined. +This flag only applies to the C1 compiler. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +By default, the maximum bytecode size is set to 35 bytes: +.RS +.RS +.PP +\f[CR]\-XX:MaxInlineSize=35\f[R] +.RE +.RE +.TP +\f[CR]\-XX:MaxTrivialSize=\f[R]\f[I]size\f[R] +Sets the maximum bytecode size (in bytes) of a trivial method to be +inlined. +This flag only applies to the C2 compiler. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +By default, the maximum bytecode size of a trivial method is set to 6 +bytes: +.RS +.RS +.PP +\f[CR]\-XX:MaxTrivialSize=6\f[R] +.RE +.RE +.TP +\f[CR]\-XX:C1MaxTrivialSize=\f[R]\f[I]size\f[R] +Sets the maximum bytecode size (in bytes) of a trivial method to be +inlined. +This flag only applies to the C1 compiler. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +By default, the maximum bytecode size of a trivial method is set to 6 +bytes: +.RS +.RS +.PP +\f[CR]\-XX:MaxTrivialSize=6\f[R] +.RE +.RE +.TP +\f[CR]\-XX:MaxNodeLimit=\f[R]\f[I]nodes\f[R] +Sets the maximum number of nodes to be used during single method +compilation. +By default the value depends on the features enabled. +In the following example the maximum number of nodes is set to 100,000: +.RS +.RS +.PP +\f[CR]\-XX:MaxNodeLimit=100000\f[R] +.RE +.RE +.TP +\f[CR]\-XX:NonNMethodCodeHeapSize=\f[R]\f[I]size\f[R] +Sets the size in bytes of the code segment containing nonmethod code. +.RS +A nonmethod code segment containing nonmethod code, such as compiler +buffers and the bytecode interpreter. +This code type stays in the code cache forever. +This flag is used only if \f[CR]\-XX:SegmentedCodeCache\f[R] is enabled. +.RE +.TP +\f[CR]\-XX:NonProfiledCodeHeapSize=\f[R]\f[I]size\f[R] +Sets the size in bytes of the code segment containing nonprofiled +methods. +This flag is used only if \f[CR]\-XX:SegmentedCodeCache\f[R] is enabled. +.TP +\f[CR]\-XX:+OptimizeStringConcat\f[R] +Enables the optimization of \f[CR]String\f[R] concatenation operations. +This option is enabled by default. +To disable the optimization of \f[CR]String\f[R] concatenation +operations, specify \f[CR]\-XX:\-OptimizeStringConcat\f[R]. +.TP +\f[CR]\-XX:+PrintAssembly\f[R] +Enables printing of assembly code for bytecoded and native methods by +using the external \f[CR]hsdis\-.so\f[R] or \f[CR].dll\f[R] +library. +For 64\-bit VM on Windows, it\(aqs \f[CR]hsdis\-amd64.dll\f[R]. +This lets you to see the generated code, which may help you to diagnose +performance issues. +.RS +By default, this option is disabled and assembly code isn\(aqt printed. +The \f[CR]\-XX:+PrintAssembly\f[R] option has to be used together with +the \f[CR]\-XX:UnlockDiagnosticVMOptions\f[R] option that unlocks +diagnostic JVM options. +.RE +.TP +\f[CR]\-XX:ProfiledCodeHeapSize=\f[R]\f[I]size\f[R] +Sets the size in bytes of the code segment containing profiled methods. +This flag is used only if \f[CR]\-XX:SegmentedCodeCache\f[R] is enabled. +.TP +\f[CR]\-XX:+PrintCompilation\f[R] +Enables verbose diagnostic output from the JVM by printing a message to +the console every time a method is compiled. +This lets you to see which methods actually get compiled. +By default, this option is disabled and diagnostic output isn\(aqt +printed. +.RS +You can also log compilation activity to a file by using the +\f[CR]\-XX:+LogCompilation\f[R] option. +.RE +.TP +\f[CR]\-XX:+PrintInlining\f[R] +Enables printing of inlining decisions. +This let\(aqs you see which methods are getting inlined. +.RS +By default, this option is disabled and inlining information isn\(aqt +printed. +The \f[CR]\-XX:+PrintInlining\f[R] option has to be used together with +the \f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R] option that unlocks +diagnostic JVM options. +.RE +.TP +\f[CR]\-XX:ReservedCodeCacheSize=\f[R]\f[I]size\f[R] +Sets the maximum code cache size (in bytes) for JIT\-compiled code. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +The default maximum code cache size is 240 MB; if you disable tiered +compilation with the option \f[CR]\-XX:\-TieredCompilation\f[R], then +the default size is 48 MB. +This option has a limit of 2 GB; otherwise, an error is generated. +The maximum code cache size shouldn\(aqt be less than the initial code +cache size; see the option \f[CR]\-XX:InitialCodeCacheSize\f[R]. +.TP +\f[CR]\-XX:+SegmentedCodeCache\f[R] +Enables segmentation of the code cache, without which the code cache +consists of one large segment. +With \f[CR]\-XX:+SegmentedCodeCache\f[R], separate segments will be used +for non\-method, profiled method, and non\-profiled method code. +The segments are not resized at runtime. +The advantages are better control of the memory footprint, reduced code +fragmentation, and better CPU iTLB (instruction translation lookaside +buffer) and instruction cache behavior due to improved locality. +.RS +The feature is enabled by default if tiered compilation is enabled +(\f[CR]\-XX:+TieredCompilation\f[R] ) and the reserved code cache size +(\f[CR]\-XX:ReservedCodeCacheSize\f[R]) is at least 240 MB. +.RE +.TP +\f[CR]\-XX:StartAggressiveSweepingAt=\f[R]\f[I]percent\f[R] +Forces stack scanning of active methods to aggressively remove unused +code when only the given percentage of the code cache is free. +The default value is 10%. +.TP +\f[CR]\-XX:\-TieredCompilation\f[R] +Disables the use of tiered compilation. +By default, this option is enabled. +.TP +\f[CR]\-XX:UseSSE=\f[R]\f[I]version\f[R] +Enables the use of SSE instruction set of a specified version. +Is set by default to the highest supported version available (x86 only). +.TP +\f[CR]\-XX:UseAVX=\f[R]\f[I]version\f[R] +Enables the use of AVX instruction set of a specified version. +Is set by default to the highest supported version available (x86 only). +.TP +\f[CR]\-XX:+UseAES\f[R] +Enables hardware\-based AES intrinsics for hardware that supports it. +This option is on by default on hardware that has the necessary +instructions. +The \f[CR]\-XX:+UseAES\f[R] is used in conjunction with +\f[CR]UseAESIntrinsics\f[R]. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UseAESIntrinsics\f[R] +Enables AES intrinsics. +Specifying \f[CR]\-XX:+UseAESIntrinsics\f[R] is equivalent to also +enabling \f[CR]\-XX:+UseAES\f[R]. +To disable hardware\-based AES intrinsics, specify +\f[CR]\-XX:\-UseAES \-XX:\-UseAESIntrinsics\f[R]. +For example, to enable hardware AES, use the following flags: +.RS +.RS +.PP +\f[CR]\-XX:+UseAES \-XX:+UseAESIntrinsics\f[R] +.RE +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.RE +.TP +\f[CR]\-XX:+UseAESCTRIntrinsics\f[R] +Analogous to \f[CR]\-XX:+UseAESIntrinsics\f[R] enables AES/CTR +intrinsics. +.TP +\f[CR]\-XX:+UseGHASHIntrinsics\f[R] +Controls the use of GHASH intrinsics. +Enabled by default on platforms that support the corresponding +instructions. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UseChaCha20Intrinsics\f[R] +Enable ChaCha20 intrinsics. +This option is on by default for supported platforms. +To disable ChaCha20 intrinsics, specify +\f[CR]\-XX:\-UseChaCha20Intrinsics\f[R]. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UsePoly1305Intrinsics\f[R] +Enable Poly1305 intrinsics. +This option is on by default for supported platforms. +To disable Poly1305 intrinsics, specify +\f[CR]\-XX:\-UsePoly1305Intrinsics\f[R]. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UseBASE64Intrinsics\f[R] +Controls the use of accelerated BASE64 encoding routines for +\f[CR]java.util.Base64\f[R]. +Enabled by default on platforms that support it. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UseAdler32Intrinsics\f[R] +Controls the use of Adler32 checksum algorithm intrinsic for +\f[CR]java.util.zip.Adler32\f[R]. +Enabled by default on platforms that support it. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UseCRC32Intrinsics\f[R] +Controls the use of CRC32 intrinsics for \f[CR]java.util.zip.CRC32\f[R]. +Enabled by default on platforms that support it. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UseCRC32CIntrinsics\f[R] +Controls the use of CRC32C intrinsics for +\f[CR]java.util.zip.CRC32C\f[R]. +Enabled by default on platforms that support it. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UseSHA\f[R] +Enables hardware\-based intrinsics for SHA crypto hash functions for +some hardware. +The \f[CR]UseSHA\f[R] option is used in conjunction with the +\f[CR]UseSHA1Intrinsics\f[R], \f[CR]UseSHA256Intrinsics\f[R], and +\f[CR]UseSHA512Intrinsics\f[R] options. +.RS +The \f[CR]UseSHA\f[R] and \f[CR]UseSHA*Intrinsics\f[R] flags are enabled +by default on machines that support the corresponding instructions. +This feature is applicable only when using the +\f[CR]sun.security.provider.Sun\f[R] provider for SHA operations. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +To disable all hardware\-based SHA intrinsics, specify the +\f[CR]\-XX:\-UseSHA\f[R]. +To disable only a particular SHA intrinsic, use the appropriate +corresponding option. +For example: \f[CR]\-XX:\-UseSHA256Intrinsics\f[R]. +.RE +.TP +\f[CR]\-XX:+UseSHA1Intrinsics\f[R] +Enables intrinsics for SHA\-1 crypto hash function. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UseSHA256Intrinsics\f[R] +Enables intrinsics for SHA\-224 and SHA\-256 crypto hash functions. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UseSHA512Intrinsics\f[R] +Enables intrinsics for SHA\-384 and SHA\-512 crypto hash functions. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UseMathExactIntrinsics\f[R] +Enables intrinsification of various \f[CR]java.lang.Math.*Exact()\f[R] +functions. +Enabled by default. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UseMultiplyToLenIntrinsic\f[R] +Enables intrinsification of \f[CR]BigInteger.multiplyToLen()\f[R]. +Enabled by default on platforms that support it. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\-XX:+UseSquareToLenIntrinsic +Enables intrinsification of \f[CR]BigInteger.squareToLen()\f[R]. +Enabled by default on platforms that support it. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\-XX:+UseMulAddIntrinsic +Enables intrinsification of \f[CR]BigInteger.mulAdd()\f[R]. +Enabled by default on platforms that support it. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\-XX:+UseMontgomeryMultiplyIntrinsic +Enables intrinsification of \f[CR]BigInteger.montgomeryMultiply()\f[R]. +Enabled by default on platforms that support it. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\-XX:+UseMontgomerySquareIntrinsic +Enables intrinsification of \f[CR]BigInteger.montgomerySquare()\f[R]. +Enabled by default on platforms that support it. +Flags that control intrinsics now require the option +\f[CR]\-XX:+UnlockDiagnosticVMOptions\f[R]. +.TP +\f[CR]\-XX:+UseCMoveUnconditionally\f[R] +Generates CMove (scalar and vector) instructions regardless of +profitability analysis. +.TP +\f[CR]\-XX:+UseCodeCacheFlushing\f[R] +Enables flushing of the code cache before shutting down the compiler. +This option is enabled by default. +To disable flushing of the code cache before shutting down the compiler, +specify \f[CR]\-XX:\-UseCodeCacheFlushing\f[R]. +.TP +\f[CR]\-XX:+UseCondCardMark\f[R] +Enables checking if the card is already marked before updating the card +table. +This option is disabled by default. +It should be used only on machines with multiple sockets, where it +increases the performance of Java applications that rely on concurrent +operations. +.TP +\f[CR]\-XX:+UseCountedLoopSafepoints\f[R] +Keeps safepoints in counted loops. +Its default value depends on whether the selected garbage collector +requires low latency safepoints. +.TP +\f[CR]\-XX:LoopStripMiningIter=\f[R]\f[I]number_of_iterations\f[R] +Controls the number of iterations in the inner strip mined loop. +Strip mining transforms counted loops into two level nested loops. +Safepoints are kept in the outer loop while the inner loop can execute +at full speed. +This option controls the maximum number of iterations in the inner loop. +The default value is 1,000. +.TP +\f[CR]\-XX:LoopStripMiningIterShortLoop=\f[R]\f[I]number_of_iterations\f[R] +Controls loop strip mining optimization. +Loops with the number of iterations less than specified will not have +safepoints in them. +Default value is 1/10th of \f[CR]\-XX:LoopStripMiningIter\f[R]. +.TP +\f[CR]\-XX:+UseFMA\f[R] +Enables hardware\-based FMA intrinsics for hardware where FMA +instructions are available (such as, Intel and ARM64). +FMA intrinsics are generated for the +\f[CR]java.lang.Math.fma(\f[R]\f[I]a\f[R]\f[CR],\f[R] +\f[I]b\f[R]\f[CR],\f[R] \f[I]c\f[R]\f[CR])\f[R] methods that calculate +the value of \f[CR](\f[R] \f[I]a\f[R] \f[CR]*\f[R] \f[I]b\f[R] +\f[CR]+\f[R] \f[I]c\f[R] \f[CR])\f[R] expressions. +.TP +\f[CR]\-XX:+UseSuperWord\f[R] +Enables the transformation of scalar operations into superword +operations. +Superword is a vectorization optimization. +This option is enabled by default. +To disable the transformation of scalar operations into superword +operations, specify \f[CR]\-XX:\-UseSuperWord\f[R]. +.SH ADVANCED SERVICEABILITY OPTIONS FOR JAVA +These \f[CR]java\f[R] options provide the ability to gather system +information and perform extensive debugging. +.TP +\f[CR]\-XX:+DisableAttachMechanism\f[R] +Disables the mechanism that lets tools attach to the JVM. +By default, this option is disabled, meaning that the attach mechanism +is enabled and you can use diagnostics and troubleshooting tools such as +\f[CR]jcmd\f[R], \f[CR]jstack\f[R], \f[CR]jmap\f[R], and +\f[CR]jinfo\f[R]. +.RS +.RS +.PP +\f[B]Note:\f[R] The tools such as \f[B]jcmd\f[R], \f[B]jinfo\f[R], +\f[B]jmap\f[R], and \f[B]jstack\f[R] shipped with the JDK aren\(aqt +supported when using the tools from one JDK version to troubleshoot a +different JDK version. +.RE +.RE +.TP +\f[CR]\-XX:+DTraceAllocProbes\f[R] +\f[B]Linux and macOS:\f[R] Enable \f[CR]dtrace\f[R] tool probes for +object allocation. +.TP +\f[CR]\-XX:+DTraceMethodProbes\f[R] +\f[B]Linux and macOS:\f[R] Enable \f[CR]dtrace\f[R] tool probes for +method\-entry and method\-exit. +.TP +\f[CR]\-XX:+DTraceMonitorProbes\f[R] +\f[B]Linux and macOS:\f[R] Enable \f[CR]dtrace\f[R] tool probes for +monitor events. +.TP +\f[CR]\-XX:+HeapDumpOnOutOfMemoryError\f[R] +Enables the dumping of the Java heap to a file in the current directory +by using the heap profiler (HPROF) when a +\f[CR]java.lang.OutOfMemoryError\f[R] exception is thrown by the JVM. +You can explicitly set the heap dump file path and name using the +\f[CR]\-XX:HeapDumpPath\f[R] option. +By default, this option is disabled and the heap isn\(aqt dumped when an +\f[CR]OutOfMemoryError\f[R] exception is thrown. +This applies only to \f[CR]OutOfMemoryError\f[R] exceptions caused by +Java Heap exhaustion; it does not apply to \f[CR]OutOfMemoryError\f[R] +exceptions thrown directly from Java code, nor by the JVM for other +types of resource exhaustion (such as native thread creation errors). +.TP +\f[CR]\-XX:HeapDumpPath=\f[R]\f[I]path\f[R] +Sets the path and file name for writing the heap dump provided by the +heap profiler (HPROF) when the +\f[CR]\-XX:+HeapDumpOnOutOfMemoryError\f[R] option is set. +By default, the file is created in the current working directory, and +it\(aqs named \f[CR]java_pid.hprof\f[R] where \f[CR]\f[R] is +the identifier of the process that caused the error. +The following example shows how to set the default file explicitly +(\f[CR]%p\f[R] represents the current process identifier): +.RS +.RS +.PP +\f[CR]\-XX:HeapDumpPath=./java_pid%p.hprof\f[R] +.RE +.IP \(bu 2 +\f[B]Non\-Windows:\f[R] The following example shows how to set the heap +dump file to \f[CR]/var/log/java/java_heapdump.hprof\f[R]: +.RS 2 +.RS +.PP +\f[CR]\-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof\f[R] +.RE +.RE +.IP \(bu 2 +\f[B]Windows:\f[R] The following example shows how to set the heap dump +file to \f[CR]C:/log/java/java_heapdump.log\f[R]: +.RS 2 +.RS +.PP +\f[CR]\-XX:HeapDumpPath=C:/log/java/java_heapdump.log\f[R] +.RE +.RE +.RE +.TP +\f[CR]\-XX:LogFile=\f[R]\f[I]path\f[R] +Sets the path and file name to where log data is written. +By default, the file is created in the current working directory, and +it\(aqs named \f[CR]hotspot.log\f[R]. +.RS +.IP \(bu 2 +\f[B]Non\-Windows:\f[R] The following example shows how to set the log +file to \f[CR]/var/log/java/hotspot.log\f[R]: +.RS 2 +.RS +.PP +\f[CR]\-XX:LogFile=/var/log/java/hotspot.log\f[R] +.RE +.RE +.IP \(bu 2 +\f[B]Windows:\f[R] The following example shows how to set the log file +to \f[CR]C:/log/java/hotspot.log\f[R]: +.RS 2 +.RS +.PP +\f[CR]\-XX:LogFile=C:/log/java/hotspot.log\f[R] +.RE +.RE +.RE +.TP +\f[CR]\-XX:+PrintClassHistogram\f[R] +Enables printing of a class instance histogram after one of the +following events: +.RS +.IP \(bu 2 +\f[B]Non\-Windows:\f[R] \f[CR]Control+\(rs\f[R] (\f[CR]SIGQUIT\f[R]) +.IP \(bu 2 +\f[B]Windows:\f[R] \f[CR]Control+C\f[R] (\f[CR]SIGTERM\f[R]) +By default, this option is disabled. +Setting this option is equivalent to running the \f[CR]jmap \-histo\f[R] +command, or the \f[CR]jcmd\f[R] \f[I]pid\f[R] +\f[CR]GC.class_histogram\f[R] command, where \f[I]pid\f[R] is the +current Java process identifier. +.RE +.TP +\f[CR]\-XX:+PrintConcurrentLocks\f[R] +Enables printing of \f[CR]java.util.concurrent\f[R] locks after one of +the following events: +.RS +.IP \(bu 2 +\f[B]Non\-Windows:\f[R] \f[CR]Control+\(rs\f[R] (\f[CR]SIGQUIT\f[R]) +.IP \(bu 2 +\f[B]Windows:\f[R] \f[CR]Control+C\f[R] (\f[CR]SIGTERM\f[R]) +By default, this option is disabled. +Setting this option is equivalent to running the \f[CR]jstack \-l\f[R] +command or the \f[CR]jcmd\f[R] \f[I]pid\f[R] \f[CR]Thread.print \-l\f[R] +command, where \f[I]pid\f[R] is the current Java process identifier. +.RE +.TP +\f[CR]\-XX:+PrintFlagsRanges\f[R] +Prints the range specified and allows automatic testing of the values. +See \f[B]Validate Java Virtual Machine Flag Arguments\f[R]. +.TP +\f[CR]\-XX:+PerfDataSaveToFile\f[R] +If enabled, saves \f[B]jstat\f[R] binary data when the Java application +exits. +This binary data is saved in a file named +\f[CR]hsperfdata_\f[R]\f[I]pid\f[R], where \f[I]pid\f[R] is the process +identifier of the Java application that you ran. +Use the \f[CR]jstat\f[R] command to display the performance data +contained in this file as follows: +.RS +.RS +.PP +\f[CR]jstat \-class file:///\f[R]\f[I]path\f[R]\f[CR]/hsperfdata_\f[R]\f[I]pid\f[R] +.RE +.RS +.PP +\f[CR]jstat \-gc file:///\f[R]\f[I]path\f[R]\f[CR]/hsperfdata_\f[R]\f[I]pid\f[R] +.RE +.RE +.TP +\f[CR]\-XX:+UsePerfData\f[R] +Enables the \f[CR]perfdata\f[R] feature. +This option is enabled by default to allow JVM monitoring and +performance testing. +Disabling it suppresses the creation of the \f[CR]hsperfdata_userid\f[R] +directories. +To disable the \f[CR]perfdata\f[R] feature, specify +\f[CR]\-XX:\-UsePerfData\f[R]. +.SH ADVANCED GARBAGE COLLECTION OPTIONS FOR JAVA +These \f[CR]java\f[R] options control how garbage collection (GC) is +performed by the Java HotSpot VM. +.TP +\f[CR]\-XX:+AggressiveHeap\f[R] +Enables Java heap optimization. +This sets various parameters to be optimal for long\-running jobs with +intensive memory allocation, based on the configuration of the computer +(RAM and CPU). +By default, the option is disabled and the heap sizes are configured +less aggressively. +.TP +\f[CR]\-XX:+AlwaysPreTouch\f[R] +Requests the VM to touch every page on the Java heap after requesting it +from the operating system and before handing memory out to the +application. +By default, this option is disabled and all pages are committed as the +application uses the heap space. +.TP +\f[CR]\-XX:ConcGCThreads=\f[R]\f[I]threads\f[R] +Sets the number of threads used for concurrent GC. +Sets \f[I]\f[CI]threads\f[I]\f[R] to approximately 1/4 of the number of +parallel garbage collection threads. +The default value depends on the number of CPUs available to the JVM. +.RS +For example, to set the number of threads for concurrent GC to 2, +specify the following option: +.RS +.PP +\f[CR]\-XX:ConcGCThreads=2\f[R] +.RE +.RE +.TP +\f[CR]\-XX:+DisableExplicitGC\f[R] +Enables the option that disables processing of calls to the +\f[CR]System.gc()\f[R] method. +This option is disabled by default, meaning that calls to +\f[CR]System.gc()\f[R] are processed. +If processing of calls to \f[CR]System.gc()\f[R] is disabled, then the +JVM still performs GC when necessary. +.TP +\f[CR]\-XX:+ExplicitGCInvokesConcurrent\f[R] +Enables invoking of concurrent GC by using the \f[CR]System.gc()\f[R] +request. +This option is disabled by default and can be enabled only with the +\f[CR]\-XX:+UseG1GC\f[R] option. +.TP +\f[CR]\-XX:G1AdaptiveIHOPNumInitialSamples=\f[R]\f[I]number\f[R] +When \f[CR]\-XX:UseAdaptiveIHOP\f[R] is enabled, this option sets the +number of completed marking cycles used to gather samples until G1 +adaptively determines the optimum value of +\f[CR]\-XX:InitiatingHeapOccupancyPercent\f[R]. +Before, G1 uses the value of +\f[CR]\-XX:InitiatingHeapOccupancyPercent\f[R] directly for this +purpose. +The default value is 3. +.TP +\f[CR]\-XX:G1HeapRegionSize=\f[R]\f[I]size\f[R] +Sets the size of the regions into which the Java heap is subdivided when +using the garbage\-first (G1) collector. +The value is a power of 2 and can range from 1 MB to 32 MB. +The default region size is determined ergonomically based on the heap +size with a goal of approximately 2048 regions. +.RS +The following example sets the size of the subdivisions to 16 MB: +.RS +.PP +\f[CR]\-XX:G1HeapRegionSize=16m\f[R] +.RE +.RE +.TP +\f[CR]\-XX:G1HeapWastePercent=\f[R]\f[I]percent\f[R] +Sets the percentage of heap that you\(aqre willing to waste. +The Java HotSpot VM doesn\(aqt initiate the mixed garbage collection +cycle when the reclaimable percentage is less than the heap waste +percentage. +The default is 5 percent. +.TP +\f[CR]\-XX:G1MaxNewSizePercent=\f[R]\f[I]percent\f[R] +Sets the percentage of the heap size to use as the maximum for the young +generation size. +The default value is 60 percent of your Java heap. +.RS +This is an experimental flag. +This setting replaces the \f[CR]\-XX:DefaultMaxNewGenPercent\f[R] +setting. +.RE +.TP +\f[CR]\-XX:G1MixedGCCountTarget=\f[R]\f[I]number\f[R] +Sets the target number of mixed garbage collections after a marking +cycle to collect old regions with at most +\f[CR]G1MixedGCLIveThresholdPercent\f[R] live data. +The default is 8 mixed garbage collections. +The goal for mixed collections is to be within this target number. +.TP +\f[CR]\-XX:G1MixedGCLiveThresholdPercent=\f[R]\f[I]percent\f[R] +Sets the occupancy threshold for an old region to be included in a mixed +garbage collection cycle. +The default occupancy is 85 percent. +.RS +This is an experimental flag. +This setting replaces the +\f[CR]\-XX:G1OldCSetRegionLiveThresholdPercent\f[R] setting. +.RE +.TP +\f[CR]\-XX:G1NewSizePercent=\f[R]\f[I]percent\f[R] +Sets the percentage of the heap to use as the minimum for the young +generation size. +The default value is 5 percent of your Java heap. +.RS +This is an experimental flag. +This setting replaces the \f[CR]\-XX:DefaultMinNewGenPercent\f[R] +setting. +.RE +.TP +\f[CR]\-XX:G1OldCSetRegionThresholdPercent=\f[R]\f[I]percent\f[R] +Sets an upper limit on the number of old regions to be collected during +a mixed garbage collection cycle. +The default is 10 percent of the Java heap. +.TP +\f[CR]\-XX:G1ReservePercent=\f[R]\f[I]percent\f[R] +Sets the percentage of the heap (0 to 50) that\(aqs reserved as a false +ceiling to reduce the possibility of promotion failure for the G1 +collector. +When you increase or decrease the percentage, ensure that you adjust the +total Java heap by the same amount. +By default, this option is set to 10%. +.RS +The following example sets the reserved heap to 20%: +.RS +.PP +\f[CR]\-XX:G1ReservePercent=20\f[R] +.RE +.RE +.TP +\f[CR]\-XX:+G1UseAdaptiveIHOP\f[R] +Controls adaptive calculation of the old generation occupancy to start +background work preparing for an old generation collection. +If enabled, G1 uses \f[CR]\-XX:InitiatingHeapOccupancyPercent\f[R] for +the first few times as specified by the value of +\f[CR]\-XX:G1AdaptiveIHOPNumInitialSamples\f[R], and after that +adaptively calculates a new optimum value for the initiating occupancy +automatically. +Otherwise, the old generation collection process always starts at the +old generation occupancy determined by +\f[CR]\-XX:InitiatingHeapOccupancyPercent\f[R]. +.RS +The default is enabled. +.RE +.TP +\f[CR]\-XX:InitialHeapSize=\f[R]\f[I]size\f[R] +Sets the initial size (in bytes) of the memory allocation pool. +This value must be either 0, or a multiple of 1024 and greater than 1 +MB. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +The default value is selected at run time based on the system +configuration. +.RS +The following examples show how to set the size of allocated memory to 6 +MB using various units: +.IP +.EX +\-XX:InitialHeapSize=6291456 +\-XX:InitialHeapSize=6144k +\-XX:InitialHeapSize=6m +.EE +If you set this option to 0, then the initial size is set as the sum of +the sizes allocated for the old generation and the young generation. +The size of the heap for the young generation can be set using the +\f[CR]\-XX:NewSize\f[R] option. +Note that the \f[CR]\-Xms\f[R] option sets both the minimum and the +initial heap size of the heap. +If \f[CR]\-Xms\f[R] appears after \f[CR]\-XX:InitialHeapSize\f[R] on the +command line, then the initial heap size gets set to the value specified +with \f[CR]\-Xms\f[R]. +.RE +.TP +\f[CR]\-XX:InitialRAMPercentage=\f[R]\f[I]percent\f[R] +Sets the initial amount of memory that the JVM will use for the Java +heap before applying ergonomics heuristics as a percentage of the +maximum amount determined as described in the \f[CR]\-XX:MaxRAM\f[R] +option. +The default value is 1.5625 percent. +.RS +The following example shows how to set the percentage of the initial +amount of memory used for the Java heap: +.RS +.PP +\f[CR]\-XX:InitialRAMPercentage=5\f[R] +.RE +.RE +.TP +\f[CR]\-XX:InitialSurvivorRatio=\f[R]\f[I]ratio\f[R] +Sets the initial survivor space ratio used by the throughput garbage +collector (which is enabled by the \f[CR]\-XX:+UseParallelGC\f[R] +option). +Adaptive sizing is enabled by default with the throughput garbage +collector by using the \f[CR]\-XX:+UseParallelGC\f[R] option, and the +survivor space is resized according to the application behavior, +starting with the initial value. +If adaptive sizing is disabled (using the +\f[CR]\-XX:\-UseAdaptiveSizePolicy\f[R] option), then the +\f[CR]\-XX:SurvivorRatio\f[R] option should be used to set the size of +the survivor space for the entire execution of the application. +.RS +The following formula can be used to calculate the initial size of +survivor space (S) based on the size of the young generation (Y), and +the initial survivor space ratio (R): +.RS +.PP +\f[CR]S=Y/(R+2)\f[R] +.RE +The 2 in the equation denotes two survivor spaces. +The larger the value specified as the initial survivor space ratio, the +smaller the initial survivor space size. +By default, the initial survivor space ratio is set to 8. +If the default value for the young generation space size is used (2 MB), +then the initial size of the survivor space is 0.2 MB. +The following example shows how to set the initial survivor space ratio +to 4: +.RS +.PP +\f[CR]\-XX:InitialSurvivorRatio=4\f[R] +.RE +.RE +.TP +\f[CR]\-XX:InitiatingHeapOccupancyPercent=\f[R]\f[I]percent\f[R] +Sets the percentage of the old generation occupancy (0 to 100) at which +to start the first few concurrent marking cycles for the G1 garbage +collector. +.RS +By default, the initiating value is set to 45%. +A value of 0 implies nonstop concurrent GC cycles from the beginning +until G1 adaptively sets this value. +See also the \f[CR]\-XX:G1UseAdaptiveIHOP\f[R] and +\f[CR]\-XX:G1AdaptiveIHOPNumInitialSamples\f[R] options. +The following example shows how to set the initiating heap occupancy to +75%: +.RS +.PP +\f[CR]\-XX:InitiatingHeapOccupancyPercent=75\f[R] +.RE +.RE +.TP +\f[CR]\-XX:MaxGCPauseMillis=\f[R]\f[I]time\f[R] +Sets a target for the maximum GC pause time (in milliseconds). +This is a soft goal, and the JVM will make its best effort to achieve +it. +The specified value doesn\(aqt adapt to your heap size. +By default, for G1 the maximum pause time target is 200 milliseconds. +The other generational collectors do not use a pause time goal by +default. +.RS +The following example shows how to set the maximum target pause time to +500 ms: +.RS +.PP +\f[CR]\-XX:MaxGCPauseMillis=500\f[R] +.RE +.RE +.TP +\f[CR]\-XX:MaxHeapSize=\f[R]\f[I]size\f[R] +Sets the maximum size (in byes) of the memory allocation pool. +This value must be a multiple of 1024 and greater than 2 MB. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +The default value is selected at run time based on the system +configuration. +For server deployments, the options \f[CR]\-XX:InitialHeapSize\f[R] and +\f[CR]\-XX:MaxHeapSize\f[R] are often set to the same value. +.RS +The following examples show how to set the maximum allowed size of +allocated memory to 80 MB using various units: +.IP +.EX +\-XX:MaxHeapSize=83886080 +\-XX:MaxHeapSize=81920k +\-XX:MaxHeapSize=80m +.EE +The \f[CR]\-XX:MaxHeapSize\f[R] option is equivalent to +\f[CR]\-Xmx\f[R]. +.RE +.TP +\f[CR]\-XX:MaxHeapFreeRatio=\f[R]\f[I]percent\f[R] +Sets the maximum allowed percentage of free heap space (0 to 100) after +a GC event. +If free heap space expands above this value, then the heap is shrunk. +By default, this value is set to 70%. +.RS +Minimize the Java heap size by lowering the values of the parameters +\f[CR]MaxHeapFreeRatio\f[R] (default value is 70%) and +\f[CR]MinHeapFreeRatio\f[R] (default value is 40%) with the +command\-line options \f[CR]\-XX:MaxHeapFreeRatio\f[R] and +\f[CR]\-XX:MinHeapFreeRatio\f[R]. +Lowering \f[CR]MaxHeapFreeRatio\f[R] to as low as 10% and +\f[CR]MinHeapFreeRatio\f[R] to 5% has successfully reduced the heap size +without too much performance regression; however, results may vary +greatly depending on your application. +Try different values for these parameters until they\(aqre as low as +possible yet still retain acceptable performance. +.RS +.PP +\f[CR]\-XX:MaxHeapFreeRatio=10 \-XX:MinHeapFreeRatio=5\f[R] +.RE +Customers trying to keep the heap small should also add the option +\f[CR]\-XX:\-ShrinkHeapInSteps\f[R]. +See \f[B]Performance Tuning Examples\f[R] for a description of using +this option to keep the Java heap small by reducing the dynamic +footprint for embedded applications. +.RE +.TP +\f[CR]\-XX:MaxMetaspaceSize=\f[R]\f[I]size\f[R] +Sets the maximum amount of native memory that can be allocated for class +metadata. +By default, the size isn\(aqt limited. +The amount of metadata for an application depends on the application +itself, other running applications, and the amount of memory available +on the system. +.RS +The following example shows how to set the maximum class metadata size +to 256 MB: +.RS +.PP +\f[CR]\-XX:MaxMetaspaceSize=256m\f[R] +.RE +.RE +.TP +\f[CR]\-XX:MaxNewSize=\f[R]\f[I]size\f[R] +Sets the maximum size (in bytes) of the heap for the young generation +(nursery). +The default value is set ergonomically. +.TP +\f[CR]\-XX:MaxRAM=\f[R]\f[I]size\f[R] +Sets the maximum amount of memory that the JVM may use for the Java heap +before applying ergonomics heuristics. +The default value is the maximum amount of available memory to the JVM +process or 128 GB, whichever is lower. +.RS +The maximum amount of available memory to the JVM process is the minimum +of the machine\(aqs physical memory and any constraints set by the +environment (e.g. +container). +Specifying this option disables automatic use of compressed oops if the +combined result of this and other options influencing the maximum amount +of memory is larger than the range of memory addressable by compressed +oops. +See \f[CR]\-XX:UseCompressedOops\f[R] for further information about +compressed oops. +The following example shows how to set the maximum amount of available +memory for sizing the Java heap to 2 GB: +.RS +.PP +\f[CR]\-XX:MaxRAM=2G\f[R] +.RE +.RE +.TP +\f[CR]\-XX:MaxRAMPercentage=\f[R]\f[I]percent\f[R] +Sets the maximum amount of memory that the JVM may use for the Java heap +before applying ergonomics heuristics as a percentage of the maximum +amount determined as described in the \f[CR]\-XX:MaxRAM\f[R] option. +The default value is 25 percent. +.RS +Specifying this option disables automatic use of compressed oops if the +combined result of this and other options influencing the maximum amount +of memory is larger than the range of memory addressable by compressed +oops. +See \f[CR]\-XX:UseCompressedOops\f[R] for further information about +compressed oops. +The following example shows how to set the percentage of the maximum +amount of memory used for the Java heap: +.RS +.PP +\f[CR]\-XX:MaxRAMPercentage=75\f[R] +.RE +.RE +.TP +\f[CR]\-XX:MinRAMPercentage=\f[R]\f[I]percent\f[R] +Sets the maximum amount of memory that the JVM may use for the Java heap +before applying ergonomics heuristics as a percentage of the maximum +amount determined as described in the \f[CR]\-XX:MaxRAM\f[R] option for +small heaps. +A small heap is a heap of approximately 125 MB. +The default value is 50 percent. +.RS +The following example shows how to set the percentage of the maximum +amount of memory used for the Java heap for small heaps: +.RS +.PP +\f[CR]\-XX:MinRAMPercentage=75\f[R] +.RE +.RE +.TP +\f[CR]\-XX:MaxTenuringThreshold=\f[R]\f[I]threshold\f[R] +Sets the maximum tenuring threshold for use in adaptive GC sizing. +The largest value is 15. +The default value is 15 for the parallel (throughput) collector. +.RS +The following example shows how to set the maximum tenuring threshold to +10: +.RS +.PP +\f[CR]\-XX:MaxTenuringThreshold=10\f[R] +.RE +.RE +.TP +\f[CR]\-XX:MetaspaceSize=\f[R]\f[I]size\f[R] +Sets the size of the allocated class metadata space that triggers a +garbage collection the first time it\(aqs exceeded. +This threshold for a garbage collection is increased or decreased +depending on the amount of metadata used. +The default size depends on the platform. +.TP +\f[CR]\-XX:MinHeapFreeRatio=\f[R]\f[I]percent\f[R] +Sets the minimum allowed percentage of free heap space (0 to 100) after +a GC event. +If free heap space falls below this value, then the heap is expanded. +By default, this value is set to 40%. +.RS +Minimize Java heap size by lowering the values of the parameters +\f[CR]MaxHeapFreeRatio\f[R] (default value is 70%) and +\f[CR]MinHeapFreeRatio\f[R] (default value is 40%) with the +command\-line options \f[CR]\-XX:MaxHeapFreeRatio\f[R] and +\f[CR]\-XX:MinHeapFreeRatio\f[R]. +Lowering \f[CR]MaxHeapFreeRatio\f[R] to as low as 10% and +\f[CR]MinHeapFreeRatio\f[R] to 5% has successfully reduced the heap size +without too much performance regression; however, results may vary +greatly depending on your application. +Try different values for these parameters until they\(aqre as low as +possible, yet still retain acceptable performance. +.RS +.PP +\f[CR]\-XX:MaxHeapFreeRatio=10 \-XX:MinHeapFreeRatio=5\f[R] +.RE +Customers trying to keep the heap small should also add the option +\f[CR]\-XX:\-ShrinkHeapInSteps\f[R]. +See \f[B]Performance Tuning Examples\f[R] for a description of using +this option to keep the Java heap small by reducing the dynamic +footprint for embedded applications. +.RE +.TP +\f[CR]\-XX:MinHeapSize=\f[R]\f[I]size\f[R] +Sets the minimum size (in bytes) of the memory allocation pool. +This value must be either 0, or a multiple of 1024 and greater than 1 +MB. +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +The default value is selected at run time based on the system +configuration. +.RS +The following examples show how to set the minimum size of allocated +memory to 6 MB using various units: +.IP +.EX +\-XX:MinHeapSize=6291456 +\-XX:MinHeapSize=6144k +\-XX:MinHeapSize=6m +.EE +If you set this option to 0, then the minimum size is set to the same +value as the initial size. +.RE +.TP +\f[CR]\-XX:NewRatio=\f[R]\f[I]ratio\f[R] +Sets the ratio between young and old generation sizes. +By default, this option is set to 2. +The following example shows how to set the young\-to\-old ratio to 1: +.RS +.RS +.PP +\f[CR]\-XX:NewRatio=1\f[R] +.RE +.RE +.TP +\f[CR]\-XX:NewSize=\f[R]\f[I]size\f[R] +Sets the initial size (in bytes) of the heap for the young generation +(nursery). +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +.RS +The young generation region of the heap is used for new objects. +GC is performed in this region more often than in other regions. +If the size for the young generation is too low, then a large number of +minor GCs are performed. +If the size is too high, then only full GCs are performed, which can +take a long time to complete. +It is recommended that you keep the size for the young generation +greater than 25% and less than 50% of the overall heap size. +The following examples show how to set the initial size of the young +generation to 256 MB using various units: +.IP +.EX +\-XX:NewSize=256m +\-XX:NewSize=262144k +\-XX:NewSize=268435456 +.EE +The \f[CR]\-XX:NewSize\f[R] option is equivalent to \f[CR]\-Xmn\f[R]. +.RE +.TP +\f[CR]\-XX:ParallelGCThreads=\f[R]\f[I]threads\f[R] +Sets the number of the stop\-the\-world (STW) worker threads. +The default value depends on the number of CPUs available to the JVM and +the garbage collector selected. +.RS +For example, to set the number of threads for G1 GC to 2, specify the +following option: +.RS +.PP +\f[CR]\-XX:ParallelGCThreads=2\f[R] +.RE +.RE +.TP +\f[CR]\-XX:+ParallelRefProcEnabled\f[R] +Enables parallel reference processing. +By default, collectors employing multiple threads perform parallel +reference processing if the number of parallel threads to use is larger +than one. +The option is available only when the throughput or G1 garbage collector +is used (\f[CR]\-XX:+UseParallelGC\f[R] or \f[CR]\-XX:+UseG1GC\f[R]). +Other collectors employing multiple threads always perform reference +processing in parallel. +.TP +\f[CR]\-XX:+PrintAdaptiveSizePolicy\f[R] +Enables printing of information about adaptive\-generation sizing. +By default, this option is disabled. +.TP +\f[CR]\-XX:SoftRefLRUPolicyMSPerMB=\f[R]\f[I]time\f[R] +Sets the amount of time (in milliseconds) a softly reachable object is +kept active on the heap after the last time it was referenced. +The default value is one second of lifetime per free megabyte in the +heap. +The \f[CR]\-XX:SoftRefLRUPolicyMSPerMB\f[R] option accepts integer +values representing milliseconds per one megabyte of the current heap +size (for Java HotSpot Client VM) or the maximum possible heap size (for +Java HotSpot Server VM). +This difference means that the Client VM tends to flush soft references +rather than grow the heap, whereas the Server VM tends to grow the heap +rather than flush soft references. +In the latter case, the value of the \f[CR]\-Xmx\f[R] option has a +significant effect on how quickly soft references are garbage collected. +.RS +The following example shows how to set the value to 2.5 seconds: +\f[CR]\-XX:SoftRefLRUPolicyMSPerMB=2500\f[R] +.RE +.TP +\f[CR]\-XX:\-ShrinkHeapInSteps\f[R] +Incrementally reduces the Java heap to the target size, specified by the +option \f[CR]\-XX:MaxHeapFreeRatio\f[R]. +This option is enabled by default. +If disabled, then it immediately reduces the Java heap to the target +size instead of requiring multiple garbage collection cycles. +Disable this option if you want to minimize the Java heap size. +You will likely encounter performance degradation when this option is +disabled. +.RS +See \f[B]Performance Tuning Examples\f[R] for a description of using the +\f[CR]MaxHeapFreeRatio\f[R] option to keep the Java heap small by +reducing the dynamic footprint for embedded applications. +.RE +.TP +\f[CR]\-XX:StringDeduplicationAgeThreshold=\f[R]\f[I]threshold\f[R] +Identifies \f[CR]String\f[R] objects reaching the specified age that are +considered candidates for deduplication. +An object\(aqs age is a measure of how many times it has survived +garbage collection. +This is sometimes referred to as tenuring. +.RS +.RS +.PP +\f[B]Note:\f[R] \f[CR]String\f[R] objects that are promoted to an old +heap region before this age has been reached are always considered +candidates for deduplication. +The default value for this option is \f[CR]3\f[R]. +See the \f[CR]\-XX:+UseStringDeduplication\f[R] option. +.RE +.RE +.TP +\f[CR]\-XX:SurvivorRatio=\f[R]\f[I]ratio\f[R] +Sets the ratio between eden space size and survivor space size. +By default, this option is set to 8. +The following example shows how to set the eden/survivor space ratio to +4: +.RS +.RS +.PP +\f[CR]\-XX:SurvivorRatio=4\f[R] +.RE +.RE +.TP +\f[CR]\-XX:TargetSurvivorRatio=\f[R]\f[I]percent\f[R] +Sets the desired percentage of survivor space (0 to 100) used after +young garbage collection. +By default, this option is set to 50%. +.RS +The following example shows how to set the target survivor space ratio +to 30%: +.RS +.PP +\f[CR]\-XX:TargetSurvivorRatio=30\f[R] +.RE +.RE +.TP +\f[CR]\-XX:TLABSize=\f[R]\f[I]size\f[R] +Sets the initial size (in bytes) of a thread\-local allocation buffer +(TLAB). +Append the letter \f[CR]k\f[R] or \f[CR]K\f[R] to indicate kilobytes, +\f[CR]m\f[R] or \f[CR]M\f[R] to indicate megabytes, or \f[CR]g\f[R] or +\f[CR]G\f[R] to indicate gigabytes. +If this option is set to 0, then the JVM selects the initial size +automatically. +.RS +The following example shows how to set the initial TLAB size to 512 KB: +.RS +.PP +\f[CR]\-XX:TLABSize=512k\f[R] +.RE +.RE +.TP +\f[CR]\-XX:+UseAdaptiveSizePolicy\f[R] +Enables the use of adaptive generation sizing. +This option is enabled by default. +To disable adaptive generation sizing, specify +\f[CR]\-XX:\-UseAdaptiveSizePolicy\f[R] and set the size of the memory +allocation pool explicitly. +See the \f[CR]\-XX:SurvivorRatio\f[R] option. +.TP +\f[CR]\-XX:+UseG1GC\f[R] +Enables the use of the garbage\-first (G1) garbage collector. +It\(aqs a server\-style garbage collector, targeted for multiprocessor +machines with a large amount of RAM. +This option meets GC pause time goals with high probability, while +maintaining good throughput. +The G1 collector is recommended for applications requiring large heaps +(sizes of around 6 GB or larger) with limited GC latency requirements (a +stable and predictable pause time below 0.5 seconds). +By default, this option is enabled and G1 is used as the default garbage +collector. +.TP +\f[CR]\-XX:+UseGCOverheadLimit\f[R] +Enables the use of a policy that limits the proportion of time spent by +the JVM on GC before an \f[CR]OutOfMemoryError\f[R] exception is thrown. +This option is enabled, by default, and the parallel GC will throw an +\f[CR]OutOfMemoryError\f[R] if more than 98% of the total time is spent +on garbage collection and less than 2% of the heap is recovered. +When the heap is small, this feature can be used to prevent applications +from running for long periods of time with little or no progress. +To disable this option, specify the option +\f[CR]\-XX:\-UseGCOverheadLimit\f[R]. +.TP +\f[CR]\-XX:+UseNUMA\f[R] +Enables performance optimization of an application on a machine with +nonuniform memory architecture (NUMA) by increasing the application\(aqs +use of lower latency memory. +The default value for this option depends on the garbage collector. +.TP +\f[CR]\-XX:+UseParallelGC\f[R] +Enables the use of the parallel scavenge garbage collector (also known +as the throughput collector) to improve the performance of your +application by leveraging multiple processors. +.RS +By default, this option is disabled and the default collector is used. +.RE +.TP +\f[CR]\-XX:+UseSerialGC\f[R] +Enables the use of the serial garbage collector. +This is generally the best choice for small and simple applications that +don\(aqt require any special functionality from garbage collection. +By default, this option is disabled and the default collector is used. +.TP +\f[CR]\-XX:+UseStringDeduplication\f[R] +Enables string deduplication. +By default, this option is disabled. +To use this option, you must enable the garbage\-first (G1) garbage +collector. +.RS +String deduplication reduces the memory footprint of \f[CR]String\f[R] +objects on the Java heap by taking advantage of the fact that many +\f[CR]String\f[R] objects are identical. +Instead of each \f[CR]String\f[R] object pointing to its own character +array, identical \f[CR]String\f[R] objects can point to and share the +same character array. +.RE +.TP +\f[CR]\-XX:+UseTLAB\f[R] +Enables the use of thread\-local allocation blocks (TLABs) in the young +generation space. +This option is enabled by default. +To disable the use of TLABs, specify the option +\f[CR]\-XX:\-UseTLAB\f[R]. +.TP +\f[CR]\-XX:+UseZGC\f[R] +Enables the use of the Z garbage collector (ZGC). +This is a low latency garbage collector, providing max pause times of a +few milliseconds, at some throughput cost. +Pause times are independent of what heap size is used. +Supports heap sizes from 8MB to 16TB. +.TP +\f[CR]\-XX:ZAllocationSpikeTolerance=\f[R]\f[I]factor\f[R] +Sets the allocation spike tolerance for ZGC. +By default, this option is set to 2.0. +This factor describes the level of allocation spikes to expect. +For example, using a factor of 3.0 means the current allocation rate can +be expected to triple at any time. +.TP +\f[CR]\-XX:ZCollectionInterval=\f[R]\f[I]seconds\f[R] +Sets the maximum interval (in seconds) between two GC cycles when using +ZGC. +By default, this option is set to 0 (disabled). +.TP +\f[CR]\-XX:ZFragmentationLimit=\f[R]\f[I]percent\f[R] +Sets the maximum acceptable heap fragmentation (in percent) for ZGC. +By default, this option is set to 25. +Using a lower value will cause the heap to be compacted more +aggressively, to reclaim more memory at the cost of using more CPU time. +.TP +\f[CR]\-XX:+ZProactive\f[R] +Enables proactive GC cycles when using ZGC. +By default, this option is enabled. +ZGC will start a proactive GC cycle if doing so is expected to have +minimal impact on the running application. +This is useful if the application is mostly idle or allocates very few +objects, but you still want to keep the heap size down and allow +reference processing to happen even when there are a lot of free space +on the heap. +.TP +\f[CR]\-XX:+ZUncommit\f[R] +Enables uncommitting of unused heap memory when using ZGC. +By default, this option is enabled. +Uncommitting unused heap memory will lower the memory footprint of the +JVM, and make that memory available for other processes to use. +.TP +\f[CR]\-XX:ZUncommitDelay=\f[R]\f[I]seconds\f[R] +Sets the amount of time (in seconds) that heap memory must have been +unused before being uncommitted. +By default, this option is set to 300 (5 minutes). +Committing and uncommitting memory are relatively expensive operations. +Using a lower value will cause heap memory to be uncommitted earlier, at +the risk of soon having to commit it again. +.TP +\f[CR]\-XX:+UseShenandoahGC\f[R] +Enables the use of the Shenandoah garbage collector. +This is a low pause time, concurrent garbage collector. +Its pause times are not proportional to the size of the heap. +Shenandoah garbage collector can work with compressed pointers. +See \f[CR]\-XX:UseCompressedOops\f[R] for further information about +compressed pointers. +.TP +\f[CR]\-XX:ShenandoahGCMode=\f[R]\f[I]mode\f[R] +Sets the GC mode for Shenandoah GC to use. +By default, this option is set to \f[CR]satb\f[R]. +Among other things, this defines which barriers are in use. +Possible mode values include the following: +.RS +.TP +\f[CR]satb\f[R] +Snapshot\-at\-the\-beginning concurrent GC (three pass +mark\-evac\-update). +It is a single generation GC. +.TP +\f[CR]generational\f[R] +It is also a snapshot\-at\-the\-beginning and concurrent GC, but it is +generational. +Please see \f[B]JEP 404\f[R] [https://openjdk.org/jeps/404] and \f[B]JEP +521\f[R] [https://openjdk.org/jeps/521] for its advantages and risks. +.RE +.TP +\f[CR]\-XX:ShenandoahGCHeuristics=\f[R]\f[I]heuristics\f[R] +Sets the heuristics for Shenandoah GC to use. +By default, this option is set to \f[CR]adaptive\f[R]. +This fine\-tunes the GC mode selected, by choosing when to start the GC, +how much to process on each cycle, and what other features to +automatically enable. +When \f[CR]\-XX:ShenandoahGCMode\f[R] is \f[CR]generational\f[R], the +only supported option is the default, \f[CR]adaptive\f[R]. +.RS +Possible heuristics are the following: +.TP +\f[CR]adaptive\f[R] +To maintain the given amount of free heap at all times, even during the +GC cycle. +.TP +\f[CR]static\f[R] +Trigger GC when free heap falls below a specified threshold. +.TP +\f[CR]compact\f[R] +Run GC more frequently and with deeper targets to free up more memory. +.RE +.SH DEPRECATED JAVA OPTIONS +These \f[CR]java\f[R] options are deprecated and might be removed in a +future JDK release. +They\(aqre still accepted and acted upon, but a warning is issued when +they\(aqre used. +.TP +\f[CR]\-Xloggc:\f[R]\f[I]filename\f[R] +Sets the file to which verbose GC events information should be +redirected for logging. +The \f[CR]\-Xloggc\f[R] option overrides \f[CR]\-verbose:gc\f[R] if both +are given with the same java command. +\f[CR]\-Xloggc:\f[R]\f[I]filename\f[R] is replaced by +\f[CR]\-Xlog:gc:\f[R]\f[I]filename\f[R]. +See Enable Logging with the JVM Unified Logging Framework. +.RS +Example: +\f[CR]\-Xlog:gc:garbage\-collection.log\f[R] +.RE +.TP +\f[CR]\-XX:+FlightRecorder\f[R] +Enables the use of Java Flight Recorder (JFR) during the runtime of the +application. +Since JDK 8u40 this option has not been required to use JFR. +.SH OBSOLETE JAVA OPTIONS +These \f[CR]java\f[R] options are still accepted but ignored, and a +warning is issued when they\(aqre used. +.TP +\f[CR]\-\-illegal\-access=\f[R]\f[I]parameter\f[R] +Controlled \f[I]relaxed strong encapsulation\f[R], as defined in +\f[B]JEP 261\f[R] +[https://openjdk.org/jeps/261#Relaxed\-strong\-encapsulation]. +This option was deprecated in JDK 16 by \f[B]JEP 396\f[R] +[https://openjdk.org/jeps/396] and made obsolete in JDK 17 by \f[B]JEP +403\f[R] [https://openjdk.org/jeps/403]. +.SH REMOVED JAVA OPTIONS +These \f[CR]java\f[R] options have been removed in JDK 25 and using them +results in an error of: +.RS +.PP +\f[CR]Unrecognized VM option\f[R] \f[I]option\-name\f[R] +.RE +.TP +\f[CR]\-XX:RTMAbortRatio=\f[R]\f[I]abort_ratio\f[R] +Specifies the RTM abort ratio is specified as a percentage (%) of all +executed RTM transactions. +If a number of aborted transactions becomes greater than this ratio, +then the compiled code is deoptimized. +This ratio is used when the \f[CR]\-XX:+UseRTMDeopt\f[R] option is +enabled. +The default value of this option is 50. +This means that the compiled code is deoptimized if 50% of all +transactions are aborted. +.TP +\f[CR]\-XX:RTMRetryCount=\f[R]\f[I]number_of_retries\f[R] +Specifies the number of times that the RTM locking code is retried, when +it is aborted or busy, before falling back to the normal locking +mechanism. +The default value for this option is 5. +The \f[CR]\-XX:UseRTMLocking\f[R] option must be enabled. +.TP +\f[CR]\-XX:+UseRTMDeopt\f[R] +Autotunes RTM locking depending on the abort ratio. +This ratio is specified by the \f[CR]\-XX:RTMAbortRatio\f[R] option. +If the number of aborted transactions exceeds the abort ratio, then the +method containing the lock is deoptimized and recompiled with all locks +as normal locks. +This option is disabled by default. +The \f[CR]\-XX:+UseRTMLocking\f[R] option must be enabled. +.TP +\f[CR]\-XX:+UseRTMLocking\f[R] +Generates Restricted Transactional Memory (RTM) locking code for all +inflated locks, with the normal locking mechanism as the fallback +handler. +This option is disabled by default. +Options related to RTM are available only on x86 CPUs that support +Transactional Synchronization Extensions (TSX). +.RS +RTM is part of Intel\(aqs TSX, which is an x86 instruction set extension +and facilitates the creation of multithreaded applications. +RTM introduces the new instructions \f[CR]XBEGIN\f[R], +\f[CR]XABORT\f[R], \f[CR]XEND\f[R], and \f[CR]XTEST\f[R]. +The \f[CR]XBEGIN\f[R] and \f[CR]XEND\f[R] instructions enclose a set of +instructions to run as a transaction. +If no conflict is found when running the transaction, then the memory +and register modifications are committed together at the \f[CR]XEND\f[R] +instruction. +The \f[CR]XABORT\f[R] instruction can be used to explicitly abort a +transaction and the \f[CR]XTEST\f[R] instruction checks if a set of +instructions is being run in a transaction. +A lock on a transaction is inflated when another thread tries to access +the same transaction, thereby blocking the thread that didn\(aqt +originally request access to the transaction. +RTM requires that a fallback set of operations be specified in case a +transaction aborts or fails. +An RTM lock is a lock that has been delegated to the TSX\(aqs system. +RTM improves performance for highly contended locks with low conflict in +a critical region (which is code that must not be accessed by more than +one thread concurrently). +RTM also improves the performance of coarse\-grain locking, which +typically doesn\(aqt perform well in multithreaded applications. +(Coarse\-grain locking is the strategy of holding locks for long periods +to minimize the overhead of taking and releasing locks, while +fine\-grained locking is the strategy of trying to achieve maximum +parallelism by locking only when necessary and unlocking as soon as +possible.) +Also, for lightly contended locks that are used by different threads, +RTM can reduce false cache line sharing, also known as cache line +ping\-pong. +This occurs when multiple threads from different processors are +accessing different resources, but the resources share the same cache +line. +As a result, the processors repeatedly invalidate the cache lines of +other processors, which forces them to read from main memory instead of +their cache. +.RE +.PP +For the lists and descriptions of options removed in previous releases +see the \f[I]Removed Java Options\f[R] section in: +.IP \(bu 2 +\f[B]The \f[CB]java\f[B] Command, Release 24\f[R] +[https://docs.oracle.com/en/java/javase/24/docs/specs/man/java.html] +.IP \(bu 2 +\f[B]The \f[CB]java\f[B] Command, Release 23\f[R] +[https://docs.oracle.com/en/java/javase/23/docs/specs/man/java.html] +.IP \(bu 2 +\f[B]The \f[CB]java\f[B] Command, Release 22\f[R] +[https://docs.oracle.com/en/java/javase/22/docs/specs/man/java.html] +.IP \(bu 2 +\f[B]The \f[CB]java\f[B] Command, Release 21\f[R] +[https://docs.oracle.com/en/java/javase/21/docs/specs/man/java.html] +.IP \(bu 2 +\f[B]The \f[CB]java\f[B] Command, Release 20\f[R] +[https://docs.oracle.com/en/java/javase/20/docs/specs/man/java.html] +.IP \(bu 2 +\f[B]The \f[CB]java\f[B] Command, Release 19\f[R] +[https://docs.oracle.com/en/java/javase/19/docs/specs/man/java.html] +.IP \(bu 2 +\f[B]The \f[CB]java\f[B] Command, Release 18\f[R] +[https://docs.oracle.com/en/java/javase/18/docs/specs/man/java.html] +.IP \(bu 2 +\f[B]The \f[CB]java\f[B] Command, Release 17\f[R] +[https://docs.oracle.com/en/java/javase/17/docs/specs/man/java.html] +.IP \(bu 2 +\f[B]The \f[CB]java\f[B] Command, Release 16\f[R] +[https://docs.oracle.com/en/java/javase/16/docs/specs/man/java.html] +.IP \(bu 2 +\f[B]The \f[CB]java\f[B] Command, Release 15\f[R] +[https://docs.oracle.com/en/java/javase/15/docs/specs/man/java.html] +.IP \(bu 2 +\f[B]The \f[CB]java\f[B] Command, Release 14\f[R] +[https://docs.oracle.com/en/java/javase/14/docs/specs/man/java.html] +.IP \(bu 2 +\f[B]The \f[CB]java\f[B] Command, Release 13\f[R] +[https://docs.oracle.com/en/java/javase/13/docs/specs/man/java.html] +.IP \(bu 2 +\f[B]Java Platform, Standard Edition Tools Reference, Release 12\f[R] +[https://docs.oracle.com/en/java/javase/12/tools/java.html#GUID\-3B1CE181\-CD30\-4178\-9602\-230B800D4FAE] +.IP \(bu 2 +\f[B]Java Platform, Standard Edition Tools Reference, Release 11\f[R] +[https://docs.oracle.com/en/java/javase/11/tools/java.html#GUID\-741FC470\-AA3E\-494A\-8D2B\-1B1FE4A990D1] +.IP \(bu 2 +\f[B]Java Platform, Standard Edition Tools Reference, Release 10\f[R] +[https://docs.oracle.com/javase/10/tools/java.htm#JSWOR624] +.IP \(bu 2 +\f[B]Java Platform, Standard Edition Tools Reference, Release 9\f[R] +[https://docs.oracle.com/javase/9/tools/java.htm#JSWOR624] +.IP \(bu 2 +\f[B]Java Platform, Standard Edition Tools Reference, Release 8 for +Oracle JDK on Windows\f[R] +[https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html#BGBCIEFC] +.IP \(bu 2 +\f[B]Java Platform, Standard Edition Tools Reference, Release 8 for +Oracle JDK on Solaris, Linux, and macOS\f[R] +[https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BGBCIEFC] +.SH JAVA COMMAND\-LINE ARGUMENT FILES +You can shorten or simplify the \f[CR]java\f[R] command by using +\f[CR]\(at\f[R] argument files to specify one or more text files that +contain arguments, such as options and class names, which are passed to +the \f[CR]java\f[R] command. +This let\(aqs you to create \f[CR]java\f[R] commands of any length on +any operating system. +.PP +In the command line, use the at sign (\f[CR]\(at\f[R]) prefix to +identify an argument file that contains \f[CR]java\f[R] options and +class names. +When the \f[CR]java\f[R] command encounters a file beginning with the at +sign (\f[CR]\(at\f[R]), it expands the contents of that file into an +argument list just as they would be specified on the command line. +.PP +The \f[CR]java\f[R] launcher expands the argument file contents until it +encounters the \f[CR]\-\-disable\-\(atfiles\f[R] option. +You can use the \f[CR]\-\-disable\-\(atfiles\f[R] option anywhere on the +command line, including in an argument file, to stop \f[CR]\(at\f[R] +argument files expansion. +.PP +The following items describe the syntax of \f[CR]java\f[R] argument +files: +.IP \(bu 2 +The argument file must contain only ASCII characters or characters in +system default encoding that\(aqs ASCII friendly, such as UTF\-8. +.IP \(bu 2 +The argument file size must not exceed MAXINT (2,147,483,647) bytes. +.IP \(bu 2 +The launcher doesn\(aqt expand wildcards that are present within an +argument file. +That means an asterisk (\f[CR]*\f[R]) is passed on as\-is to the +starting VM. +For example \f[CR]*.java\f[R] stays \f[CR]*.java\f[R] and is not +expanded to \f[CR]Foo.java Bar.java ...\f[R], as would happen with some +command line shells. +.IP \(bu 2 +Use white space or new line characters to separate arguments included in +the file. +.IP \(bu 2 +White space includes a white space character, \f[CR]\(rst\f[R], +\f[CR]\(rsn\f[R], \f[CR]\(rsr\f[R], and \f[CR]\(rsf\f[R]. +.RS 2 +.PP +For example, it is possible to have a path with a space, such as +\f[CR]c:\(rsProgram Files\f[R] that can be specified as either +\f[CR]\(dqc:\(rs\(rsProgram Files\(dq\f[R] or, to avoid an escape, +\f[CR]c:\(rsProgram\(dq \(dqFiles\f[R]. +.RE +.IP \(bu 2 +Any option that contains spaces, such as a path component, must be +within quotation marks using quotation (\(aq\(dq\(aq) characters in its +entirety. +.IP \(bu 2 +A string within quotation marks may contain the characters +\f[CR]\(rsn\f[R], \f[CR]\(rsr\f[R], \f[CR]\(rst\f[R], and +\f[CR]\(rsf\f[R]. +They are converted to their respective ASCII codes. +.IP \(bu 2 +If a file name contains embedded spaces, then put the whole file name in +double quotation marks. +.IP \(bu 2 +File names in an argument file are relative to the current directory, +not to the location of the argument file. +.IP \(bu 2 +Use the number sign \f[CR]#\f[R] in the argument file to identify +comments. +All characters following the \f[CR]#\f[R] are ignored until the end of +line. +.IP \(bu 2 +Additional at sign \f[CR]\(at\f[R] prefixes to \f[CR]\(at\f[R] prefixed +options act as an escape, (the first \f[CR]\(at\f[R] is removed and the +rest of the arguments are presented to the launcher literally). +.IP \(bu 2 +Lines may be continued using the continuation character +(\f[CR]\(rs\f[R]) at the end\-of\-line. +The two lines are concatenated with the leading white spaces trimmed. +To prevent trimming the leading white spaces, a continuation character +(\f[CR]\(rs\f[R]) may be placed at the first column. +.IP \(bu 2 +Because backslash (\(rs) is an escape character, a backslash character +must be escaped with another backslash character. +.IP \(bu 2 +Partial quote is allowed and is closed by an end\-of\-file. +.IP \(bu 2 +An open quote stops at end\-of\-line unless \f[CR]\(rs\f[R] is the last +character, which then joins the next line by removing all leading white +space characters. +.IP \(bu 2 +Use of the at sign (\f[CR]\(at\f[R]) to recursively interpret files +isn\(aqt supported. +.SS Example of Open or Partial Quotes in an Argument File +In the argument file, +.IP +.EX +\-cp \(dqlib/ +cool/ +app/ +jars +.EE +.PP +this is interpreted as: +.RS +.PP +\f[CR]\-cp lib/cool/app/jars\f[R] +.RE +.SS Example of a Backslash Character Escaped with Another Backslash Character in an Argument File +To output the following: +.RS +.PP +\f[CR]\-cp c:\(rsProgram Files (x86)\(rsJava\(rsjre\(rslib\(rsext;c:\(rsProgram Files\(rsJava\(rsjre9\(rslib\(rsext\f[R] +.RE +.PP +The backslash character must be specified in the argument file as: +.RS +.PP +\f[CR]\-cp \(dqc:\(rs\(rsProgram Files (x86)\(rs\(rsJava\(rs\(rsjre\(rs\(rslib\(rs\(rsext;c:\(rs\(rsProgram Files\(rs\(rsJava\(rs\(rsjre9\(rs\(rslib\(rs\(rsext\(dq\f[R] +.RE +.SS Example of an EOL Escape Used to Force Concatenation of Lines in an Argument File +In the argument file, +.IP +.EX +\-cp \(dq/lib/cool app/jars:\(rs + /lib/another app/jars\(dq +.EE +.PP +This is interpreted as: +.RS +.PP +\f[CR]\-cp /lib/cool app/jars:/lib/another app/jars\f[R] +.RE +.SS Example of Line Continuation with Leading Spaces in an Argument File +In the argument file, +.IP +.EX +\-cp \(dq/lib/cool\(rs +\(rsapp/jars\(dq +.EE +.PP +This is interpreted as: +.PP +\f[CR]\-cp /lib/cool app/jars\f[R] +.SS Examples of Using Single Argument File +You can use a single argument file, such as \f[CR]myargumentfile\f[R] in +the following example, to hold all required \f[CR]java\f[R] arguments: +.RS +.PP +\f[CR]java \(atmyargumentfile\f[R] +.RE +.SS Examples of Using Argument Files with Paths +You can include relative paths in argument files; however, they\(aqre +relative to the current working directory and not to the paths of the +argument files themselves. +In the following example, \f[CR]path1/options\f[R] and +\f[CR]path2/options\f[R] represent argument files with different paths. +Any relative paths that they contain are relative to the current working +directory and not to the argument files: +.RS +.PP +\f[CR]java \(atpath1/options \(atpath2/classes\f[R] +.RE +.SH CODE HEAP STATE ANALYTICS +.SS Overview +There are occasions when having insight into the current state of the +JVM code heap would be helpful to answer questions such as: +.IP \(bu 2 +Why was the JIT turned off and then on again and again? +.IP \(bu 2 +Where has all the code heap space gone? +.IP \(bu 2 +Why is the method sweeper not working effectively? +.PP +To provide this insight, a code heap state analytics feature has been +implemented that enables on\-the\-fly analysis of the code heap. +The analytics process is divided into two parts. +The first part examines the entire code heap and aggregates all +information that is believed to be useful or important. +The second part consists of several independent steps that print the +collected information with an emphasis on different aspects of the data. +Data collection and printing are done on an \(dqon request\(dq basis. +.SS Syntax +Requests for real\-time, on\-the\-fly analysis can be issued with the +following command: +.RS +.PP +\f[CR]jcmd\f[R] \f[I]pid\f[R] \f[CR]Compiler.CodeHeap_Analytics\f[R] +[\f[I]function\f[R]] [\f[I]granularity\f[R]] +.RE +.PP +If you are only interested in how the code heap looks like after running +a sample workload, you can use the command line option: +.RS +.PP +\f[CR]\-Xlog:codecache=Trace\f[R] +.RE +.PP +To see the code heap state when a \(dqCodeCache full\(dq condition +exists, start the VM with the command line option: +.RS +.PP +\f[CR]\-Xlog:codecache=Debug\f[R] +.RE +.PP +See \f[B]CodeHeap State Analytics (OpenJDK)\f[R] +[https://bugs.openjdk.org/secure/attachment/75649/JVM_CodeHeap_StateAnalytics_V2.pdf] +for a detailed description of the code heap state analytics feature, the +supported functions, and the granularity options. +.SH ENABLE LOGGING WITH THE JVM UNIFIED LOGGING FRAMEWORK +You use the \f[CR]\-Xlog\f[R] option to configure or enable logging with +the Java Virtual Machine (JVM) unified logging framework. +.SS Synopsis +.RS +.PP +\f[CR]\-Xlog\f[R][\f[CR]:\f[R][\f[I]what\f[R]][\f[CR]:\f[R][\f[I]output\f[R]][\f[CR]:\f[R][\f[I]decorators\f[R]][\f[CR]:\f[R]\f[I]output\-options\f[R][\f[CR],\f[R]...]]]]] +.PP +\f[CR]\-Xlog:\f[R]\f[I]directive\f[R] +.RE +.TP +\f[I]what\f[R] +Specifies a combination of tags and levels of the form +\f[I]tag1\f[R][\f[CR]+\f[R]\f[I]tag2\f[R]...][\f[CR]*\f[R]][\f[CR]=\f[R]\f[I]level\f[R]][\f[CR],\f[R]...]. +Unless the wildcard (\f[CR]*\f[R]) is specified, only log messages +tagged with exactly the tags specified are matched. +See \f[B]\-Xlog Tags and Levels\f[R]. +.TP +\f[I]output\f[R] +Sets the type of output. +Omitting the \f[I]output\f[R] type defaults to \f[CR]stdout\f[R]. +See \f[B]\-Xlog Output\f[R]. +.TP +\f[I]decorators\f[R] +Configures the output to use a custom set of decorators. +Omitting \f[I]decorators\f[R] defaults to \f[CR]uptime\f[R], +\f[CR]level\f[R], and \f[CR]tags\f[R]. +See \f[B]Decorations\f[R]. +.TP +\f[I]output\-options\f[R] +Sets the \f[CR]\-Xlog\f[R] logging output options. +.TP +\f[I]directive\f[R] +A global option or subcommand: help, disable, async +.SS Description +The Java Virtual Machine (JVM) unified logging framework provides a +common logging system for all components of the JVM. +GC logging for the JVM has been changed to use the new logging +framework. +The mapping of old GC flags to the corresponding new Xlog configuration +is described in \f[B]Convert GC Logging Flags to Xlog\f[R]. +In addition, runtime logging has also been changed to use the JVM +unified logging framework. +The mapping of legacy runtime logging flags to the corresponding new +Xlog configuration is described in \f[B]Convert Runtime Logging Flags to +Xlog\f[R]. +.PP +The following provides quick reference to the \f[CR]\-Xlog\f[R] command +and syntax for options: +.TP +\f[CR]\-Xlog\f[R] +Enables JVM logging on an \f[CR]info\f[R] level. +.TP +\f[CR]\-Xlog:help\f[R] +Prints \f[CR]\-Xlog\f[R] usage syntax and available tags, levels, and +decorators along with example command lines with explanations. +.TP +\f[CR]\-Xlog:disable\f[R] +Turns off all logging and clears all configuration of the logging +framework including the default configuration for warnings and errors. +.TP +\f[CR]\-Xlog\f[R][\f[CR]:\f[R]\f[I]option\f[R]] +Applies multiple arguments in the order that they appear on the command +line. +Multiple \f[CR]\-Xlog\f[R] arguments for the same output override each +other in their given order. +.RS +The \f[I]option\f[R] is set as: +.RS +.PP +[\f[I]tag\-selection\f[R]][\f[CR]:\f[R][\f[I]output\f[R]][\f[CR]:\f[R][\f[I]decorators\f[R]][\f[CR]:\f[R]\f[I]output\-options\f[R]]]] +.RE +Omitting the \f[I]tag\-selection\f[R] defaults to a tag\-set of +\f[CR]all\f[R] and a level of \f[CR]info\f[R]. +.RS +.PP +\f[I]tag\f[R][\f[CR]+\f[R]...] +\f[CR]all\f[R] +.RE +The \f[CR]all\f[R] tag is a meta tag consisting of all tag\-sets +available. +The asterisk \f[CR]*\f[R] in a tag set definition denotes a wildcard tag +match. +Matching with a wildcard selects all tag sets that contain \f[I]at +least\f[R] the specified tags. +Without the wildcard, only exact matches of the specified tag sets are +selected. +\f[I]output\-options\f[R] is +.RS +.PP +\f[CR]filecount=\f[R]\f[I]file\-count\f[R] \f[CR]filesize=\f[R]\f[I]file +size with optional K, M or G suffix\f[R] +\f[CR]foldmultilines=\f[R]\f[I]\f[R] +.RE +When \f[CR]foldmultilines\f[R] is true, a log event that consists of +multiple lines will be folded into a single line by replacing newline +characters with the sequence \f[CR]\(aq\(rs\(aq\f[R] and +\f[CR]\(aqn\(aq\f[R] in the output. +Existing single backslash characters will also be replaced with a +sequence of two backslashes so that the conversion can be reversed. +This option is safe to use with UTF\-8 character encodings, but other +encodings may not work. +For example, it may incorrectly convert multi\-byte sequences in Shift +JIS and BIG5. +.RE +.SS Default Configuration +When the \f[CR]\-Xlog\f[R] option and nothing else is specified on the +command line, the default configuration is used. +The default configuration logs all messages with a level that matches +either warning or error regardless of what tags the message is +associated with. +The default configuration is equivalent to entering the following on the +command line: +.RS +.PP +\f[CR]\-Xlog:all=warning:stdout:uptime,level,tags\f[R] +.RE +.SS Controlling Logging at Runtime +Logging can also be controlled at run time through Diagnostic Commands +(with the \f[B]jcmd\f[R] utility). +Everything that can be specified on the command line can also be +specified dynamically with the \f[CR]VM.log\f[R] command. +As the diagnostic commands are automatically exposed as MBeans, you can +use JMX to change logging configuration at run time. +.SS \-Xlog Tags and Levels +Each log message has a level and a tag set associated with it. +The level of the message corresponds to its details, and the tag set +corresponds to what the message contains or which JVM component it +involves (such as, \f[CR]gc\f[R], \f[CR]jit\f[R], or \f[CR]os\f[R]). +Mapping GC flags to the Xlog configuration is described in \f[B]Convert +GC Logging Flags to Xlog\f[R]. +Mapping legacy runtime logging flags to the corresponding Xlog +configuration is described in \f[B]Convert Runtime Logging Flags to +Xlog\f[R]. +.PP +\f[B]Available log levels:\f[R] +.IP \(bu 2 +\f[CR]off\f[R] +.IP \(bu 2 +\f[CR]trace\f[R] +.IP \(bu 2 +\f[CR]debug\f[R] +.IP \(bu 2 +\f[CR]info\f[R] +.IP \(bu 2 +\f[CR]warning\f[R] +.IP \(bu 2 +\f[CR]error\f[R] +.PP +\f[B]Available log tags:\f[R] +.PP +There are literally dozens of log tags, which in the right combinations, +will enable a range of logging output. +The full set of available log tags can be seen using +\f[CR]\-Xlog:help\f[R]. +Specifying \f[CR]all\f[R] instead of a tag combination matches all tag +combinations. +.SS \-Xlog Output +The \f[CR]\-Xlog\f[R] option supports the following types of outputs: +.IP \(bu 2 +\f[CR]stdout\f[R] \-\-\- Sends output to stdout +.IP \(bu 2 +\f[CR]stderr\f[R] \-\-\- Sends output to stderr +.IP \(bu 2 +\f[CR]file=\f[R]\f[I]filename\f[R] \-\-\- Sends output to text file(s). +.PP +When using \f[CR]file=\f[R]\f[I]filename\f[R], specifying \f[CR]%p\f[R], +\f[CR]%t\f[R] and/or \f[CR]%hn\f[R] in the file name expands to the +JVM\(aqs PID, startup timestamp and host name, respectively. +You can also configure text files to handle file rotation based on file +size and a number of files to rotate. +For example, to rotate the log file every 10 MB and keep 5 files in +rotation, specify the options \f[CR]filesize=10M, filecount=5\f[R]. +The target size of the files isn\(aqt guaranteed to be exact, it\(aqs +just an approximate value. +Files are rotated by default with up to 5 rotated files of target size +20 MB, unless configured otherwise. +Specifying \f[CR]filecount=0\f[R] means that the log file shouldn\(aqt +be rotated. +There\(aqs a possibility of the pre\-existing log file getting +overwritten. +.SS \-Xlog Output Mode +By default logging messages are output synchronously \- each log message +is written to the designated output when the logging call is made. +You can instead use asynchronous logging mode by specifying: +.TP +\f[CR]\-Xlog:async[:[stall|drop]]\f[R] +.IP +.EX +Write all logging asynchronously. +.EE +.PP +In asynchronous logging mode, log sites enqueue all logging messages to +an intermediate buffer and a standalone thread is responsible for +flushing them to the corresponding outputs. +The intermediate buffer is bounded. +On buffer exhaustion the enqueuing message is either discarded +(\f[CR]async:drop\f[R]), or logging threads are stalled until the +flushing thread catches up (\f[CR]async:stall\f[R]). +If no specific mode is chosen, then \f[CR]async:drop\f[R] is chosen by +default. +Log entry write operations are guaranteed to be non\-blocking in the +\f[CR]async:drop\f[R] case. +.PP +The option \f[CR]\-XX:AsyncLogBufferSize=N\f[R] specifies the memory +budget in bytes for the intermediate buffer. +The default value should be big enough to cater for most cases. +Users can provide a custom value to trade memory overhead for log +accuracy if they need to. +.SS Decorations +Logging messages are decorated with information about the message. +You can configure each output to use a custom set of decorators. +The order of the output is always the same as listed in the table. +You can configure the decorations to be used at run time. +Decorations are prepended to the log message. +For example: +.IP +.EX +[6.567s][info][gc,old] Old collection complete +.EE +.PP +Omitting \f[CR]decorators\f[R] defaults to \f[CR]uptime\f[R], +\f[CR]level\f[R], and \f[CR]tags\f[R]. +The \f[CR]none\f[R] decorator is special and is used to turn off all +decorations. +.PP +\f[CR]time\f[R] (\f[CR]t\f[R]), \f[CR]utctime\f[R] (\f[CR]utc\f[R]), +\f[CR]uptime\f[R] (\f[CR]u\f[R]), \f[CR]timemillis\f[R] (\f[CR]tm\f[R]), +\f[CR]uptimemillis\f[R] (\f[CR]um\f[R]), \f[CR]timenanos\f[R] +(\f[CR]tn\f[R]), \f[CR]uptimenanos\f[R] (\f[CR]un\f[R]), +\f[CR]hostname\f[R] (\f[CR]hn\f[R]), \f[CR]pid\f[R] (\f[CR]p\f[R]), +\f[CR]tid\f[R] (\f[CR]ti\f[R]), \f[CR]level\f[R] (\f[CR]l\f[R]), +\f[CR]tags\f[R] (\f[CR]tg\f[R]) decorators can also be specified as +\f[CR]none\f[R] for no decoration. +.PP +Logging Messages Decorations +.TS +tab(@); +lw(14.9n) lw(55.1n). +T{ +Decorations +T}@T{ +Description +T} +_ +T{ +\f[CR]time\f[R] or \f[CR]t\f[R] +T}@T{ +Current time and date in ISO\-8601 format. +T} +T{ +\f[CR]utctime\f[R] or \f[CR]utc\f[R] +T}@T{ +Universal Time Coordinated or Coordinated Universal Time. +T} +T{ +\f[CR]uptime\f[R] or \f[CR]u\f[R] +T}@T{ +Time since the start of the JVM in seconds and milliseconds. +For example, 6.567s. +T} +T{ +\f[CR]timemillis\f[R] or \f[CR]tm\f[R] +T}@T{ +The same value as generated by \f[CR]System.currentTimeMillis()\f[R] +T} +T{ +\f[CR]uptimemillis\f[R] or \f[CR]um\f[R] +T}@T{ +Milliseconds since the JVM started. +T} +T{ +\f[CR]timenanos\f[R] or \f[CR]tn\f[R] +T}@T{ +The same value generated by \f[CR]System.nanoTime()\f[R]. +T} +T{ +\f[CR]uptimenanos\f[R] or \f[CR]un\f[R] +T}@T{ +Nanoseconds since the JVM started. +T} +T{ +\f[CR]hostname\f[R] or \f[CR]hn\f[R] +T}@T{ +The host name. +T} +T{ +\f[CR]pid\f[R] or \f[CR]p\f[R] +T}@T{ +The process identifier. +T} +T{ +\f[CR]tid\f[R] or \f[CR]ti\f[R] +T}@T{ +The thread identifier. +T} +T{ +\f[CR]level\f[R] or \f[CR]l\f[R] +T}@T{ +The level associated with the log message. +T} +T{ +\f[CR]tags\f[R] or \f[CR]tg\f[R] +T}@T{ +The tag\-set associated with the log message. +T} +.TE +.SS Convert GC Logging Flags to Xlog +.PP +Legacy GC Logging Flags to Xlog Configuration Mapping +.TS +tab(@); +lw(22.4n) lw(16.5n) lw(31.2n). +T{ +Legacy Garbage Collection (GC) Flag +T}@T{ +Xlog Configuration +T}@T{ +Comment +T} +_ +T{ +\f[CR]G1PrintHeapRegions\f[R] +T}@T{ +\f[CR]\-Xlog:gc+region=trace\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]GCLogFileSize\f[R] +T}@T{ +No configuration available +T}@T{ +Log rotation is handled by the framework. +T} +T{ +\f[CR]NumberOfGCLogFiles\f[R] +T}@T{ +Not Applicable +T}@T{ +Log rotation is handled by the framework. +T} +T{ +\f[CR]PrintAdaptiveSizePolicy\f[R] +T}@T{ +\f[CR]\-Xlog:gc+ergo*=\f[R]\f[I]level\f[R] +T}@T{ +Use a \f[I]level\f[R] of \f[CR]debug\f[R] for most of the information, +or a \f[I]level\f[R] of \f[CR]trace\f[R] for all of what was logged for +\f[CR]PrintAdaptiveSizePolicy\f[R]. +T} +T{ +\f[CR]PrintGC\f[R] +T}@T{ +\f[CR]\-Xlog:gc\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]PrintGCApplicationConcurrentTime\f[R] +T}@T{ +\f[CR]\-Xlog:safepoint\f[R] +T}@T{ +Note that \f[CR]PrintGCApplicationConcurrentTime\f[R] and +\f[CR]PrintGCApplicationStoppedTime\f[R] are logged on the same tag and +aren\(aqt separated in the new logging. +T} +T{ +\f[CR]PrintGCApplicationStoppedTime\f[R] +T}@T{ +\f[CR]\-Xlog:safepoint\f[R] +T}@T{ +Note that \f[CR]PrintGCApplicationConcurrentTime\f[R] and +\f[CR]PrintGCApplicationStoppedTime\f[R] are logged on the same tag and +not separated in the new logging. +T} +T{ +\f[CR]PrintGCCause\f[R] +T}@T{ +Not Applicable +T}@T{ +GC cause is now always logged. +T} +T{ +\f[CR]PrintGCDateStamps\f[R] +T}@T{ +Not Applicable +T}@T{ +Date stamps are logged by the framework. +T} +T{ +\f[CR]PrintGCDetails\f[R] +T}@T{ +\f[CR]\-Xlog:gc*\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]PrintGCID\f[R] +T}@T{ +Not Applicable +T}@T{ +GC ID is now always logged. +T} +T{ +\f[CR]PrintGCTaskTimeStamps\f[R] +T}@T{ +\f[CR]\-Xlog:gc+task*=debug\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]PrintGCTimeStamps\f[R] +T}@T{ +Not Applicable +T}@T{ +Time stamps are logged by the framework. +T} +T{ +\f[CR]PrintHeapAtGC\f[R] +T}@T{ +\f[CR]\-Xlog:gc+heap=trace\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]PrintReferenceGC\f[R] +T}@T{ +\f[CR]\-Xlog:gc+ref*=debug\f[R] +T}@T{ +Note that in the old logging, \f[CR]PrintReferenceGC\f[R] had an effect +only if \f[CR]PrintGCDetails\f[R] was also enabled. +T} +T{ +\f[CR]PrintStringDeduplicationStatistics\f[R] +T}@T{ +\(ga\-Xlog:gc+stringdedup*=debug +T}@T{ +\(ga Not Applicable +T} +T{ +\f[CR]PrintTenuringDistribution\f[R] +T}@T{ +\f[CR]\-Xlog:gc+age*=\f[R]\f[I]level\f[R] +T}@T{ +Use a \f[I]level\f[R] of \f[CR]debug\f[R] for the most relevant +information, or a \f[I]level\f[R] of \f[CR]trace\f[R] for all of what +was logged for \f[CR]PrintTenuringDistribution\f[R]. +T} +T{ +\f[CR]UseGCLogFileRotation\f[R] +T}@T{ +Not Applicable +T}@T{ +What was logged for \f[CR]PrintTenuringDistribution\f[R]. +T} +.TE +.SS Convert Runtime Logging Flags to Xlog +These legacy flags are no longer recognized and will cause an error if +used directly. +Use their unified logging equivalent instead. +.PP +Runtime Logging Flags to Xlog Configuration Mapping +.TS +tab(@); +lw(15.0n) lw(20.2n) lw(34.7n). +T{ +Legacy Runtime Flag +T}@T{ +Xlog Configuration +T}@T{ +Comment +T} +_ +T{ +\f[CR]TraceExceptions\f[R] +T}@T{ +\f[CR]\-Xlog:exceptions=info\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]TraceClassLoading\f[R] +T}@T{ +\f[CR]\-Xlog:class+load=\f[R]\f[I]level\f[R] +T}@T{ +Use \f[I]level\f[R]=\f[CR]info\f[R] for regular information, or +\f[I]level\f[R]=\f[CR]debug\f[R] for additional information. +In Unified Logging syntax, \f[CR]\-verbose:class\f[R] equals +\f[CR]\-Xlog:class+load=info,class+unload=info\f[R]. +T} +T{ +\f[CR]TraceClassLoadingPreorder\f[R] +T}@T{ +\f[CR]\-Xlog:class+preorder=debug\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]TraceClassUnloading\f[R] +T}@T{ +\f[CR]\-Xlog:class+unload=\f[R]\f[I]level\f[R] +T}@T{ +Use \f[I]level\f[R]=\f[CR]info\f[R] for regular information, or +\f[I]level\f[R]=\f[CR]trace\f[R] for additional information. +In Unified Logging syntax, \f[CR]\-verbose:class\f[R] equals +\f[CR]\-Xlog:class+load=info,class+unload=info\f[R]. +T} +T{ +\f[CR]VerboseVerification\f[R] +T}@T{ +\f[CR]\-Xlog:verification=info\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]TraceClassPaths\f[R] +T}@T{ +\f[CR]\-Xlog:class+path=info\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]TraceClassResolution\f[R] +T}@T{ +\f[CR]\-Xlog:class+resolve=debug\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]TraceClassInitialization\f[R] +T}@T{ +\f[CR]\-Xlog:class+init=info\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]TraceLoaderConstraints\f[R] +T}@T{ +\f[CR]\-Xlog:class+loader+constraints=info\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]TraceClassLoaderData\f[R] +T}@T{ +\f[CR]\-Xlog:class+loader+data=\f[R]\f[I]level\f[R] +T}@T{ +Use \f[I]level\f[R]=\f[CR]debug\f[R] for regular information or +\f[I]level\f[R]=\f[CR]trace\f[R] for additional information. +T} +T{ +\f[CR]TraceSafepointCleanupTime\f[R] +T}@T{ +\f[CR]\-Xlog:safepoint+cleanup=info\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]TraceSafepoint\f[R] +T}@T{ +\f[CR]\-Xlog:safepoint=debug\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]TraceMonitorInflation\f[R] +T}@T{ +\f[CR]\-Xlog:monitorinflation=debug\f[R] +T}@T{ +Not Applicable +T} +T{ +\f[CR]TraceRedefineClasses\f[R] +T}@T{ +\f[CR]\-Xlog:redefine+class*=\f[R]\f[I]level\f[R] +T}@T{ +\f[I]level\f[R]=\f[CR]info\f[R], \f[CR]debug\f[R], and \f[CR]trace\f[R] +provide increasing amounts of information. +T} +.TE +.SS \-Xlog Usage Examples +The following are \f[CR]\-Xlog\f[R] examples. +.TP +\f[CR]\-Xlog\f[R] +Logs all messages by using the \f[CR]info\f[R] level to +\f[CR]stdout\f[R] with \f[CR]uptime\f[R], \f[CR]levels\f[R], and +\f[CR]tags\f[R] decorations. +This is equivalent to using: +.RS +.RS +.PP +\f[CR]\-Xlog:all=info:stdout:uptime,levels,tags\f[R] +.RE +.RE +.TP +\f[CR]\-Xlog:gc\f[R] +Logs messages tagged with the \f[CR]gc\f[R] tag using \f[CR]info\f[R] +level to \f[CR]stdout\f[R]. +The default configuration for all other messages at level +\f[CR]warning\f[R] is in effect. +.TP +\f[CR]\-Xlog:gc,safepoint\f[R] +Logs messages tagged either with the \f[CR]gc\f[R] or +\f[CR]safepoint\f[R] tags, both using the \f[CR]info\f[R] level, to +\f[CR]stdout\f[R], with default decorations. +Messages tagged with both \f[CR]gc\f[R] and \f[CR]safepoint\f[R] +won\(aqt be logged. +.TP +\f[CR]\-Xlog:gc+ref=debug\f[R] +Logs messages tagged with both \f[CR]gc\f[R] and \f[CR]ref\f[R] tags, +using the \f[CR]debug\f[R] level to \f[CR]stdout\f[R], with default +decorations. +Messages tagged only with one of the two tags won\(aqt be logged. +.TP +\f[CR]\-Xlog:gc=debug:file=gc.txt:none\f[R] +Logs messages tagged with the \f[CR]gc\f[R] tag using the +\f[CR]debug\f[R] level to a file called \f[CR]gc.txt\f[R] with no +decorations. +The default configuration for all other messages at level +\f[CR]warning\f[R] is still in effect. +.TP +\f[CR]\-Xlog:gc=trace:file=gctrace.txt:uptimemillis,pid:filecount=5,filesize=1024\f[R] +Logs messages tagged with the \f[CR]gc\f[R] tag using the +\f[CR]trace\f[R] level to a rotating file set with 5 files with size 1 +MB with the base name \f[CR]gctrace.txt\f[R] and uses decorations +\f[CR]uptimemillis\f[R] and \f[CR]pid\f[R]. +.RS +The default configuration for all other messages at level +\f[CR]warning\f[R] is still in effect. +.RE +.TP +\f[CR]\-Xlog:gc::uptime,tid\f[R] +Logs messages tagged with the \f[CR]gc\f[R] tag using the default +\(aqinfo\(aq level to default the output \f[CR]stdout\f[R] and uses +decorations \f[CR]uptime\f[R] and \f[CR]tid\f[R]. +The default configuration for all other messages at level +\f[CR]warning\f[R] is still in effect. +.TP +\f[CR]\-Xlog:gc*=info,safepoint*=off\f[R] +Logs messages tagged with at least \f[CR]gc\f[R] using the +\f[CR]info\f[R] level, but turns off logging of messages tagged with +\f[CR]safepoint\f[R]. +Messages tagged with both \f[CR]gc\f[R] and \f[CR]safepoint\f[R] +won\(aqt be logged. +.TP +\f[CR]\-Xlog:disable \-Xlog:safepoint=trace:safepointtrace.txt\f[R] +Turns off all logging, including warnings and errors, and then enables +messages tagged with \f[CR]safepoint\f[R]using \f[CR]trace\f[R]level to +the file \f[CR]safepointtrace.txt\f[R]. +The default configuration doesn\(aqt apply, because the command line +started with \f[CR]\-Xlog:disable\f[R]. +.SS Complex \-Xlog Usage Examples +The following describes a few complex examples of using the +\f[CR]\-Xlog\f[R] option. +.TP +\f[CR]\-Xlog:gc+class*=debug\f[R] +Logs messages tagged with at least \f[CR]gc\f[R] and \f[CR]class\f[R] +tags using the \f[CR]debug\f[R] level to \f[CR]stdout\f[R]. +The default configuration for all other messages at the level +\f[CR]warning\f[R] is still in effect +.TP +\f[CR]\-Xlog:gc+meta*=trace,class*=off:file=gcmetatrace.txt\f[R] +Logs messages tagged with at least the \f[CR]gc\f[R] and \f[CR]meta\f[R] +tags using the \f[CR]trace\f[R] level to the file +\f[CR]metatrace.txt\f[R] but turns off all messages tagged with +\f[CR]class\f[R]. +Messages tagged with \f[CR]gc\f[R], \f[CR]meta\f[R], and +\f[CR]class\f[R] aren\(aqt be logged as \f[CR]class*\f[R] is set to off. +The default configuration for all other messages at level +\f[CR]warning\f[R] is in effect except for those that include +\f[CR]class\f[R]. +.TP +\f[CR]\-Xlog:gc+meta=trace\f[R] +Logs messages tagged with exactly the \f[CR]gc\f[R] and \f[CR]meta\f[R] +tags using the \f[CR]trace\f[R] level to \f[CR]stdout\f[R]. +The default configuration for all other messages at level +\f[CR]warning\f[R] is still be in effect. +.TP +\f[CR]\-Xlog:gc+class+heap*=debug,meta*=warning,threads*=off\f[R] +Logs messages tagged with at least \f[CR]gc\f[R], \f[CR]class\f[R], and +\f[CR]heap\f[R] tags using the \f[CR]trace\f[R] level to +\f[CR]stdout\f[R] but only log messages tagged with \f[CR]meta\f[R] with +level. +The default configuration for all other messages at the level +\f[CR]warning\f[R] is in effect except for those that include +\f[CR]threads\f[R]. +.SH VALIDATE JAVA VIRTUAL MACHINE FLAG ARGUMENTS +You use values provided to all Java Virtual Machine (JVM) command\-line +flags for validation and, if the input value is invalid or +out\-of\-range, then an appropriate error message is displayed. +.PP +Whether they\(aqre set ergonomically, in a command line, by an input +tool, or through the APIs (for example, classes contained in the package +\f[CR]java.lang.management\f[R]) the values provided to all Java Virtual +Machine (JVM) command\-line flags are validated. +Ergonomics are described in Java Platform, Standard Edition HotSpot +Virtual Machine Garbage Collection Tuning Guide. +.PP +Range and constraints are validated either when all flags have their +values set during JVM initialization or a flag\(aqs value is changed +during runtime (for example using the \f[CR]jcmd\f[R] tool). +The JVM is terminated if a value violates either the range or constraint +check and an appropriate error message is printed on the error stream. +.PP +For example, if a flag violates a range or a constraint check, then the +JVM exits with an error: +.IP +.EX +java \-XX:AllocatePrefetchStyle=5 \-version +intx AllocatePrefetchStyle=5 is outside the allowed range [ 0 ... 3 ] +Improperly specified VM option \(aqAllocatePrefetchStyle=5\(aq +Error: Could not create the Java Virtual Machine. +Error: A fatal exception has occurred. Program will exit. +.EE +.PP +The flag \f[CR]\-XX:+PrintFlagsRanges\f[R] prints the range of all the +flags. +This flag allows automatic testing of the flags by the values provided +by the ranges. +For the flags that have the ranges specified, the type, name, and the +actual range is printed in the output. +.PP +For example, +.IP +.EX +intx ThreadStackSize [ 0 ... 9007199254740987 ] {pd product} +.EE +.PP +For the flags that don\(aqt have the range specified, the values +aren\(aqt displayed in the print out. +For example: +.IP +.EX +size_t NewSize [ ... ] {product} +.EE +.PP +This helps to identify the flags that need to be implemented. +The automatic testing framework can skip those flags that don\(aqt have +values and aren\(aqt implemented. +.SH LARGE PAGES +You use large pages, also known as huge pages, as memory pages that are +significantly larger than the standard memory page size (which varies +depending on the processor and operating system). +Large pages optimize processor Translation\-Lookaside Buffers. +.PP +A Translation\-Lookaside Buffer (TLB) is a page translation cache that +holds the most\-recently used virtual\-to\-physical address +translations. +A TLB is a scarce system resource. +A TLB miss can be costly because the processor must then read from the +hierarchical page table, which may require multiple memory accesses. +By using a larger memory page size, a single TLB entry can represent a +larger memory range. +This results in less pressure on a TLB, and memory\-intensive +applications may have better performance. +.PP +However, using large pages can negatively affect system performance. +For example, when a large amount of memory is pinned by an application, +it may create a shortage of regular memory and cause excessive paging in +other applications and slow down the entire system. +Also, a system that has been up for a long time could produce excessive +fragmentation, which could make it impossible to reserve enough large +page memory. +When this happens, either the OS or JVM reverts to using regular pages. +.PP +Linux and Windows support large pages. +.SS Large Pages Support for Linux +Linux supports large pages since version 2.6. +To check if your environment supports large pages, try the following: +.IP +.EX +# cat /proc/meminfo | grep Huge +HugePages_Total: 0 +HugePages_Free: 0 +\&... +Hugepagesize: 2048 kB +.EE +.PP +If the output contains items prefixed with \(dqHuge\(dq, then your +system supports large pages. +The values may vary depending on environment. +The \f[CR]Hugepagesize\f[R] field shows the default large page size in +your environment, and the other fields show details for large pages of +this size. +Newer kernels have support for multiple large page sizes. +To list the supported page sizes, run this: +.IP +.EX +# ls /sys/kernel/mm/hugepages/ +hugepages\-1048576kB hugepages\-2048kB +.EE +.PP +The above environment supports 2 MB and 1 GB large pages, but they need +to be configured so that the JVM can use them. +When using large pages and not enabling transparent huge pages (option +\f[CR]\-XX:+UseTransparentHugePages\f[R]), the number of large pages +must be pre\-allocated. +For example, to enable 8 GB of memory to be backed by 2 MB large pages, +login as \f[CR]root\f[R] and run: +.RS +.PP +\f[CR]# echo 4096 > /sys/kernel/mm/hugepages/hugepages\-2048kB/nr_hugepages\f[R] +.RE +.PP +It is always recommended to check the value of \f[CR]nr_hugepages\f[R] +after the request to make sure the kernel was able to allocate the +requested number of large pages. +.RS +.PP +\f[B]Note:\f[R] The values contained in \f[CR]/proc\f[R] and +\f[CR]/sys\f[R] reset after you reboot your system, so may want to set +them in an initialization script (for example, \f[CR]rc.local\f[R] or +\f[CR]sysctl.conf\f[R]). +.RE +.PP +If you configure the OS kernel parameters to enable use of large pages, +the Java processes may allocate large pages for the Java heap as well as +other internal areas, for example: +.IP \(bu 2 +Code cache +.IP \(bu 2 +Marking bitmaps +.PP +Consequently, if you configure the \f[CR]nr_hugepages\f[R] parameter to +the size of the Java heap, then the JVM can still fail to allocate the +heap using large pages because other areas such as the code cache might +already have used some of the configured large pages. +.SS Large Pages Support for Windows +To use large pages support on Windows, the administrator must first +assign additional privileges to the user who is running the application: +.IP "1." 3 +Select \f[B]Control Panel\f[R], \f[B]Administrative Tools\f[R], and then +\f[B]Local Security Policy\f[R]. +.IP "2." 3 +Select \f[B]Local Policies\f[R] and then \f[B]User Rights +Assignment\f[R]. +.IP "3." 3 +Double\-click \f[B]Lock pages in memory\f[R], then add users and/or +groups. +.IP "4." 3 +Reboot your system. +.PP +Note that these steps are required even if it\(aqs the administrator +who\(aqs running the application, because administrators by default +don\(aqt have the privilege to lock pages in memory. +.SH APPLICATION CLASS DATA SHARING +Application Class Data Sharing (AppCDS) stores classes used by your +applications in an archive file. +Since these classes are stored in a format that can be loaded very +quickly (compared to classes stored in a JAR file), AppCDS can improve +the start\-up time of your applications. +In addition, AppCDS can reduce the runtime memory footprint by sharing +parts of these classes across multiple processes. +.PP +Classes in the CDS archive are stored in an optimized format that\(aqs +about 2 to 5 times larger than classes stored in JAR files or the JDK +runtime image. +Therefore, it\(aqs a good idea to archive only those classes that are +actually used by your application. +These usually are just a small portion of all available classes. +For example, your application may use only a few APIs provided by a +large library. +.SS Using CDS Archives +By default, in most JDK distributions, unless \f[CR]\-Xshare:off\f[R] is +specified, the JVM starts up with a default CDS archive, which is +usually located in \f[CR]JAVA_HOME/lib/server/classes.jsa\f[R] (or +\f[CR]JAVA_HOME\(rsbin\(rsserver\(rsclasses.jsa\f[R] on Windows). +This archive contains about 1300 core library classes that are used by +most applications. +.PP +To use CDS for the exact set of classes used by your application, you +can use the \f[CR]\-XX:SharedArchiveFile\f[R] option, which has the +general form: +.RS +.PP +\f[CR]\-XX:SharedArchiveFile=:\f[R] +.RE +.IP \(bu 2 +The \f[CR]\f[R] overrides the default CDS archive. +.IP \(bu 2 +The \f[CR]\f[R] provides additional classes that can be +loaded on top of those in the \f[CR]\f[R]. +.IP \(bu 2 +On Windows, the above path delimiter \f[CR]:\f[R] should be replaced +with \f[CR];\f[R] +.PP +The names \(dqstatic\(dq and \(dqdynamic\(dq are used for historical +reasons. +The dynamic archive, while still useful, supports fewer optimizations +than available for the static CDS archive. +If the full set of CDS/AOT optimizations are desired, consider using the +AOT cache described below. +.PP +The JVM can use up to two archives. +To use only a single \f[CR]\f[R], you can omit the +\f[CR]\f[R] portion: +.RS +.PP +\f[CR]\-XX:SharedArchiveFile=\f[R] +.RE +.PP +For convenience, the \f[CR]\f[R] records the location +of the \f[CR]\f[R]. +Therefore, you can omit the \f[CR]\f[R] by saying only: +.RS +.PP +\f[CR]\-XX:SharedArchiveFile=\f[R] +.RE +.SS Manually Creating CDS Archives +CDS archives can be created manually using several methods: +.IP \(bu 2 +\f[CR]\-Xshare:dump\f[R] +.IP \(bu 2 +\f[CR]\-XX:ArchiveClassesAtExit\f[R] +.IP \(bu 2 +\f[CR]jcmd VM.cds\f[R] +.PP +One common operation in all these methods is a \(dqtrial run\(dq, where +you run the application once to determine the classes that should be +stored in the archive. +.SS Creating a Static CDS Archive File with \-Xshare:dump +The following steps create a static CDS archive file that contains all +the classes used by the \f[CR]test.Hello\f[R] application. +.IP "1." 3 +Create a list of all classes used by the \f[CR]test.Hello\f[R] +application. +The following command creates a file named \f[CR]hello.classlist\f[R] +that contains a list of all classes used by this application: +.RS 4 +.RS +.PP +\f[CR]java \-Xshare:off \-XX:DumpLoadedClassList=hello.classlist \-cp hello.jar test.Hello\f[R] +.RE +.PP +The classpath specified by the \f[CR]\-cp\f[R] parameter must contain +only JAR files. +.RE +.IP "2." 3 +Create a static archive, named \f[CR]hello.jsa\f[R], that contains all +the classes in \f[CR]hello.classlist\f[R]: +.RS 4 +.RS +.PP +\f[CR]java \-Xshare:dump \-XX:SharedArchiveFile=hello.jsa \-XX:SharedClassListFile=hello.classlist \-cp hello.jar\f[R] +.RE +.RE +.IP "3." 3 +Run the application \f[CR]test.Hello\f[R] with the archive +\f[CR]hello.jsa\f[R]: +.RS 4 +.RS +.PP +\f[CR]java \-XX:SharedArchiveFile=hello.jsa \-cp hello.jar test.Hello\f[R] +.RE +.RE +.IP "4." 3 +\f[B]Optional\f[R] Verify that the \f[CR]test.Hello\f[R] application is +using the class contained in the \f[CR]hello.jsa\f[R] shared archive: +.RS 4 +.RS +.PP +\f[CR]java \-XX:SharedArchiveFile=hello.jsa \-cp hello.jar \-Xlog:class+load test.Hello\f[R] +.RE +.PP +The output of this command should contain the following text: +.RS +.PP +\f[CR][info][class,load] test.Hello source: shared objects file\f[R] +.RE +.RE +.PP +By default, when the \f[CR]\-Xshare:dump\f[R] option is used, the JVM +runs in interpreter\-only mode (as if the \f[CR]\-Xint\f[R] option were +specified). +This is required for generating deterministic output in the shared +archive file. +I.e., the exact same archive will be generated, bit\-for\-bit, every +time you dump it. +However, if deterministic output is not needed, and you have a large +classlist, you can explicitly add \f[CR]\-Xmixed\f[R] to the +command\-line to enable the JIT compiler. +This will speed up the archive creation. +.SS Creating a Dynamic CDS Archive File with \-XX:ArchiveClassesAtExit +Advantages of dynamic CDS archives are: +.IP \(bu 2 +They usually use less disk space, since they don\(aqt need to store the +classes that are already in the static archive. +.IP \(bu 2 +They are created with one fewer step than the comparable static archive. +.PP +The following steps create a dynamic CDS archive file that contains the +classes that are used by the \f[CR]test.Hello\f[R] application, +excluding those that are already in the default CDS archive. +.IP "1." 3 +Create a dynamic CDS archive, named \f[CR]hello.jsa\f[R], that contains +all the classes in \f[CR]hello.jar\f[R] loaded by the application +\f[CR]test.Hello\f[R]: +.RS 4 +.RS +.PP +\f[CR]java \-XX:ArchiveClassesAtExit=hello.jsa \-cp hello.jar Hello\f[R] +.RE +.RE +.IP "2." 3 +Run the application \f[CR]test.Hello\f[R] with the shared archive +\f[CR]hello.jsa\f[R]: +.RS 4 +.RS +.PP +\f[CR]java \-XX:SharedArchiveFile=hello.jsa \-cp hello.jar test.Hello\f[R] +.RE +.RE +.IP "3." 3 +\f[B]Optional\f[R] Repeat step 4 of the previous section to verify that +the \f[CR]test.Hello\f[R] application is using the class contained in +the \f[CR]hello.jsa\f[R] shared archive. +.PP +It\(aqs also possible to create a dynamic CDS archive with a +non\-default static CDS archive. +E.g., +.RS +.PP +\f[CR]java \-XX:SharedArchiveFile=base.jsa \-XX:ArchiveClassesAtExit=hello.jsa \-cp hello.jar Hello\f[R] +.RE +.PP +To run the application using this dynamic CDS archive: +.RS +.PP +\f[CR]java \-XX:SharedArchiveFile=base.jsa:hello.jsa \-cp hello.jar Hello\f[R] +.RE +.PP +(On Windows, the above path delimiter \f[CR]:\f[R] should be replaced +with \f[CR];\f[R]) +.PP +As mention above, the name of the static archive can be skipped: +.RS +.PP +\f[CR]java \-XX:SharedArchiveFile=hello.jsa \-cp hello.jar Hello\f[R] +.RE +.SS Creating CDS Archive Files with jcmd +The previous two sections require you to modify the application\(aqs +start\-up script in order to create a CDS archive. +Sometimes this could be difficult, for example, if the application\(aqs +class path is set up by complex routines. +.PP +The \f[CR]jcmd VM.cds\f[R] command provides a less intrusive way for +creating a CDS archive by connecting to a running JVM process. +You can create either a static: +.RS +.PP +\f[CR]jcmd VM.cds static_dump my_static_archive.jsa\f[R] +.RE +.PP +or a dynamic archive: +.RS +.PP +\f[CR]jcmd VM.cds dynamic_dump my_dynamic_archive.jsa\f[R] +.RE +.PP +To use the resulting archive file in a subsequent run of the application +without modifying the application\(aqs start\-up script, you can use the +following technique: +.RS +.PP +\f[CR]env JAVA_TOOL_OPTIONS=\-XX:SharedArchiveFile=my_static_archive.jsa bash app_start.sh\f[R] +.RE +.PP +Note: to use \f[CR]jcmd VM.cds dynamic_dump\f[R], the JVM process +identified by \f[CR]\f[R] must be started with +\f[CR]\-XX:+RecordDynamicDumpInfo\f[R], which can also be passed to the +application start\-up script with the same technique: +.RS +.PP +\f[CR]env JAVA_TOOL_OPTIONS=\-XX:+RecordDynamicDumpInfo bash app_start.sh\f[R] +.RE +.SS Creating Dynamic CDS Archive File with \-XX:+AutoCreateSharedArchive +\f[CR]\-XX:+AutoCreateSharedArchive\f[R] is a more convenient way of +creating/using CDS archives. +Unlike the methods of manual CDS archive creation described in the +previous section, with \f[CR]\-XX:+AutoCreateSharedArchive\f[R], it\(aqs +no longer necessary to have a separate trial run. +Instead, you can always run the application with the same command\-line +and enjoy the benefits of CDS automatically. +.RS +.PP +\f[CR]java \-XX:+AutoCreateSharedArchive \-XX:SharedArchiveFile=hello.jsa \-cp hello.jar Hello\f[R] +.RE +.PP +If the specified archive file exists and was created by the same version +of the JDK, then it will be loaded as a dynamic archive; otherwise it is +ignored at VM startup. +.PP +At VM exit, if the specified archive file does not exist, it will be +created. +If it exists but was created with a different (but post JDK 19) version +of the JDK, then it will be replaced. +In both cases the archive will be ready to be loaded the next time the +JVM is launched with the same command line. +.PP +If the specified archive file exists but was created by a JDK version +prior to JDK 19, then it will be ignored: neither loaded at startup, nor +replaced at exit. +.PP +Developers should note that the contents of the CDS archive file are +specific to each build of the JDK. +Therefore, if you switch to a different JDK build, +\f[CR]\-XX:+AutoCreateSharedArchive\f[R] will automatically recreate the +archive to match the JDK. +If you intend to use this feature with an existing archive, you should +make sure that the archive is created by at least version 19 of the JDK. +.SS Restrictions on Class Path and Module Path +.IP \(bu 2 +Neither the class path (\f[CR]\-classpath\f[R] and +\f[CR]\-Xbootclasspath/a\f[R]) nor the module path +(\f[CR]\-\-module\-path\f[R]) can contain non\-empty directories. +.IP \(bu 2 +Only modular JAR files are supported in \f[CR]\-\-module\-path\f[R]. +Exploded modules are not supported. +.IP \(bu 2 +The class path used at archive creation time must be the same as (or a +prefix of) the class path used at run time. +(There\(aqs no such requirement for the module path.) +.IP \(bu 2 +The CDS archive cannot be loaded if any JAR files in the class path or +module path are modified after the archive is generated. +.SS Module related options +The following module related options are supported by CDS: +\f[CR]\-\-module\-path\f[R], \f[CR]\-\-module\f[R], +\f[CR]\-\-add\-modules\f[R], and \f[CR]\-\-enable\-native\-access\f[R]. +.PP +The values for these options (if specified), should be identical when +creating and using the CDS archive. +Otherwise, if there is a mismatch of any of these options, the CDS +archive may be partially or completely disabled, leading to lower +performance. +.IP \(bu 2 +If the \f[CR]AOTClassLinking\f[R] option (see below) \f[I]was\f[R] +enabled during CDS archive creation, the CDS archive cannot be used, and +the following error message is printed: +.RS 2 +.PP +\f[CR]CDS archive has aot\-linked classes. It cannot be used when archived full module graph is not used\f[R] +.RE +.IP \(bu 2 +If the \f[CR]AOTClassLinking\f[R] option \f[I]was not\f[R] enabled +during CDS archive creation, the CDS archive can be used, but the +\(dqarchived module graph\(dq feature will be disabled. +This can lead to increased start\-up time. +.PP +To diagnose problems with the AOT options, you can add +\f[CR]\-Xlog:aot\f[R] to the application\(aqs VM arguments. +For example, if \f[CR]\-\-add\-modules jdk.jconsole\f[R] was specified +during archive creation and +\f[CR]\-\-add\-modules jdk.incubator.vector\f[R] is specified during +runtime, the following messages will be logged: +.PP +\f[CR]Mismatched values for property jdk.module.addmods\f[R] +.PP +\f[CR]runtime jdk.incubator.vector dump time jdk.jconsole\f[R] +.PP +\f[CR]subgraph jdk.internal.module.ArchivedBootLayer cannot be used because full module graph is disabled\f[R] +.PP +If any of the VM options \f[CR]\-\-upgrade\-module\-path\f[R], +\f[CR]\-\-patch\-module\f[R] or \f[CR]\-\-limit\-modules\f[R] are +specified, CDS is disabled. +This means that the JVM will execute without loading any CDS archives. +In addition, if you try to create a CDS archive with any of these 3 +options specified, the JVM will report an error. +.SH AHEAD\-OF\-TIME CACHE +The JDK supports ahead\-of\-time (AOT) optimizations that can be +performed before an application is executed. +One example is Class Data Sharing (CDS), as described above, that parses +classes ahead of time. +AOT optimizations can improve the start\-up and warm\-up performance of +Java applications. +.PP +The Ahead\-of\-Time Cache (AOT cache) is a container introduced in JDK +24 for storing artifacts produced by AOT optimizations. +The AOT cache currently contains Java classes and heap objects. +In future JDK releases, the AOT cache may contain additional artifacts, +such as execution profiles and compiled methods. +.PP +An AOT cache is specific to a combination of the following: +.IP \(bu 2 +A particular application (as expressed by \f[CR]\-classpath\f[R], +\f[CR]\-jar\f[R], or \f[CR]\-\-module\-path\f[R].) +.IP \(bu 2 +A particular JDK release. +.IP \(bu 2 +A particular OS and CPU architecture. +.PP +If any of the above changes, you must recreate the AOT cache. +.PP +The deployment of the AOT cache is divided into three phases: +.IP \(bu 2 +\f[B]Training:\f[R] We execute the application with a representative +work\-load to gather statistical data that tell us what artifacts should +be included into the AOT cache. +The data are saved in an \f[I]AOT Configuration\f[R] file. +.IP \(bu 2 +\f[B]Assembly:\f[R] We use the AOT Configuration file to produce an AOT +cache. +.IP \(bu 2 +\f[B]Production:\f[R] We execute the application with the AOT cache for +better start\-up and warm\-up performance. +.PP +The AOT cache can be used with the following command\-line options: +.TP +\f[CR]\-XX:AOTCache=\f[R]\f[I]cachefile\f[R] +Specifies the location of the AOT cache. +The standard extension for \f[I]cachefile\f[R] is \f[CR].aot\f[R]. +This option cannot be used together with \f[CR]\-XX:AOTCacheOutput\f[R]. +.RS +This option is compatible with \f[CR]AOTMode\f[R] settings of +\f[CR]on\f[R], \f[CR]create\f[R], or \f[CR]auto\f[R] (the default). +The \f[I]cachefile\f[R] is read in AOT modes \f[CR]on\f[R] and +\f[CR]auto\f[R], and is ignored by mode \f[CR]off\f[R]. +The \f[I]cachefile\f[R] is written by AOT mode \f[CR]create\f[R]. +In that case, this option is equivalent to +\f[CR]\-XX:AOTCacheOutput=\f[R]\f[I]cachefile\f[R]. +.RE +.TP +\f[CR]\-XX:AOTCacheOutput=\f[R]\f[I]cachefile\f[R] +Specifies the location of the AOT cache to write. +The standard extension for \f[I]cachefile\f[R] is \f[CR].aot\f[R]. +This option cannot be used together with \f[CR]\-XX:AOTCache\f[R]. +.RS +This option is compatible with \f[CR]AOTMode\f[R] settings of +\f[CR]record\f[R], \f[CR]create\f[R], or \f[CR]auto\f[R] (the default). +.RE +.TP +\f[CR]\-XX:AOTConfiguration=\f[R]\f[I]configfile\f[R] +Specifies the AOT Configuration file for the JVM to write to or read +from. +The standard extension for \f[I]configfile\f[R] is +\f[CR].aotconfig\f[R]. +.RS +This option is compatible with \f[CR]AOTMode\f[R] settings of +\f[CR]record\f[R], \f[CR]create\f[R], or \f[CR]auto\f[R] (the default). +The \f[I]configfile\f[R] is read by AOT mode \f[CR]create\f[R], and +written by the other applicable modes. +If the AOT mode is \f[CR]auto\f[R], then \f[CR]AOTCacheOutput\f[R] must +also be present. +.RE +.TP +\f[CR]\-XX:AOTMode=\f[R]\f[I]mode\f[R] +Specifies the AOT Mode for this run. +\f[I]mode\f[R] must be one of the following: \f[CR]auto\f[R], +\f[CR]off\f[R], \f[CR]record\f[R], \f[CR]create\f[R], or \f[CR]on\f[R]. +.IP \(bu 2 +\f[CR]auto\f[R]: This AOT mode is the default, and takes effect if no +\f[CR]\-XX:AOTMode\f[R] option is present. +It automatically sets the AOT mode to \f[CR]record\f[R], \f[CR]on\f[R], +or \f[CR]off\f[R], as follows: +.RS 2 +.IP \(bu 2 +If \f[CR]\-XX:AOTCacheOutput=\f[R]\f[I]cachefile\f[R] is specified, the +AOT mode is changed to \f[CR]record\f[R] (a training run, with a +subsequent \f[CR]create\f[R] operation). +.IP \(bu 2 +Otherwise, if an AOT cache can be loaded, the AOT mode is changed to +\f[CR]on\f[R] (a production run). +.IP \(bu 2 +Otherwise, the AOT mode is changed to \f[CR]off\f[R] (a production run +with no AOT cache). +.RE +.IP \(bu 2 +\f[CR]off\f[R]: No AOT cache is used. +Other AOT command line options are ignored. +.IP \(bu 2 +\f[CR]record\f[R]: Execute the application in the training phase. +At least one of \f[CR]\-XX:AOTConfiguration=\f[R]\f[I]configfile\f[R] +and/or \f[CR]\-XX:AOTCacheOutput=\f[R]\f[I]cachefile\f[R] must be +specified. +If \f[CR]\-XX:AOTConfiguration=\f[R]\f[I]configfile\f[R] is specified, +the JVM gathers statistical data and stores them into +\f[I]configfile\f[R]. +If \f[CR]\-XX:AOTConfiguration=\f[R]\f[I]configfile\f[R] is not +specified, the JVM uses a temporary file name, which may be the string +\f[CR]AOTCacheOutput+\(dq.config\(dq\f[R], or else a fresh +implementation\-dependent temporary file name. +If \f[CR]\-XX:AOTCacheOutput=\f[R]\f[I]cachefile\f[R] is specified, a +second JVM process is launched to perform the Assembly phase to write +the optimization artifacts into \f[I]cachefile\f[R]. +.RS 2 +.PP +Extra JVM options can be passed to the second JVM process using the +environment variable \f[CR]JDK_AOT_VM_OPTIONS\f[R], with the same format +as the environment variable \f[CR]JAVA_TOOL_OPTIONS\f[R], which is +\f[B]defined by JVMTI\f[R] +[https://docs.oracle.com/en/java/javase/24/docs/specs/jvmti.html#tooloptions]. +.RE +.IP \(bu 2 +\f[CR]create\f[R]: Perform the Assembly phase. +\f[CR]\-XX:AOTConfiguration=\f[R]\f[I]configfile\f[R] must be specified. +The JVM reads history and statistics from \f[I]configfile\f[R] and +writes the optimization artifacts into \f[I]cachefile\f[R]. +Note that the application itself is not executed in this phase. +.IP \(bu 2 +\f[CR]on\f[R]: Execute the application in the Production phase. +If \f[CR]\-XX:AOTCache=\f[R]\f[I]cachefile\f[R] is specified, the JVM +tries to load \f[I]cachefile\f[R] as the AOT cache. +Otherwise, the JVM tries to load a \f[I]default CDS archive\f[R] from +the JDK installation directory as the AOT cache. +.RS 2 +.PP +The loading of an AOT cache can fail for a number of reasons: +.IP \(bu 2 +You are trying to use the AOT cache with an incompatible application, +JDK release, or OS/CPU. +.IP \(bu 2 +The specified \f[I]cachefile\f[R] does not exist or is not accessible. +.IP \(bu 2 +Incompatible JVM options are used (for example, certain JVMTI options). +.RS 2 +.PP +Since the AOT cache is an optimization feature, there\(aqs no guarantee +that it will be compatible with all possible JVM options. +See \f[B]JEP 483\f[R] [https://openjdk.org/jeps/483], section +\f[B]Consistency of training and subsequent runs\f[R] for a +representative list of scenarios that may be incompatible with the AOT +cache. +.PP +These scenarios usually involve arbitrary modification of classes for +diagnostic purposes and are typically not relevant for production +environments. +.RE +.PP +When the AOT cache fails to load: +.IP \(bu 2 +If \f[CR]AOTMode\f[R] was originally \f[CR]auto\f[R], the JVM will +continue execution without using the AOT cache. +This is the recommended mode for production environments, especially +when you may not have complete control of the command\-line (e.g., your +application\(aqs launch script may allow users to inject options to the +command\-line). +This allows your application to function correctly, although sometimes +it may not benefit from the AOT cache. +.IP \(bu 2 +If \f[CR]AOTMode\f[R] is \f[CR]on\f[R], the JVM will print an error +message and exit immediately. +This mode should be used only as a \(dqfail\-fast\(dq debugging aid to +check if your command\-line options are compatible with the AOT cache. +An alternative is to run your application with +\f[CR]\-XX:AOTMode=auto \-Xlog:aot\f[R] to see if the AOT cache can be +used or not. +.RE +.TP +\f[CR]\-XX:+AOTClassLinking\f[R] +If this option is enabled, the JVM will perform more advanced +optimizations (such as ahead\-of\-time resolution of invokedynamic +instructions) when creating the AOT cache. +As a result, the application will see further improvements in start\-up +and warm\-up performance. +However, an AOT cache created with this option cannot be used when +certain command\-line parameters are specified in the Production phase. +Please see \f[B]JEP 483\f[R] [https://openjdk.org/jeps/483] for a +detailed discussion of \f[CR]\-XX:+AOTClassLinking\f[R] and its +restrictions. +.RS +When \f[CR]\-XX:AOTMode\f[R] \f[I]is used\f[R] in the command\-line, +\f[CR]AOTClassLinking\f[R] is automatically enabled. +To disable it, you must explicitly pass the +\f[CR]\-XX:\-AOTClassLinking\f[R] option. +When \f[CR]\-XX:AOTMode\f[R] \f[I]is not used\f[R] in the command\-line, +\f[CR]AOTClassLinking\f[R] is disabled by default to provide full +compatibility with traditional CDS options such as \(ga\-Xshare:dump. +.RE +.PP +The first occurrence of the special sequence \f[CR]%p\f[R] in +\f[CR]*configfile* and\f[R]\f[I]cachefile\f[R] is replaced with the +process ID of the JVM process launched in the command\-line, and +likewise the first occurrence of \f[CR]%t\f[R] is replace by the +JVM\(aqs startup timestamp. +(After replacement there must be no further occurrences of \f[CR]%p\f[R] +or \f[CR]%t\f[R], to prevent problems with sub\-processes.) +For example: +.RS +.PP +\f[CR]java \-XX:AOTConfiguration=foo%p.aotconfig \-XX:AOTCacheOutput=foo%p.aot \-cp foo.jar Foo\f[R] +.RE +.PP +will create two files: \f[CR]foopid123.aotconfig\f[R] and +\f[CR]foopid123.aot\f[R], where \f[CR]123\f[R] is the process ID of the +JVM that has executed the application \f[CR]Foo\f[R]. +.SH PERFORMANCE TUNING EXAMPLES +You can use the Java advanced runtime options to optimize the +performance of your applications. +.SS Tuning for Higher Throughput +Use the following commands and advanced options to achieve higher +throughput performance for your application: +.RS +.PP +\f[CR]java \-server \-XX:+UseParallelGC \-XX:+UseLargePages \-Xmn10g \-Xms26g \-Xmx26g\f[R] +.RE +.SS Tuning for Lower Response Time +Use the following commands and advanced options to achieve lower +response times for your application: +.RS +.PP +\f[CR]java \-XX:+UseG1GC \-XX:MaxGCPauseMillis=100\f[R] +.RE +.SS Keeping the Java Heap Small and Reducing the Dynamic Footprint of Embedded Applications +Use the following advanced runtime options to keep the Java heap small +and reduce the dynamic footprint of embedded applications: +.RS +.PP +\f[CR]\-XX:MaxHeapFreeRatio=10 \-XX:MinHeapFreeRatio=5\f[R] +.RE +.RS +.PP +\f[B]Note:\f[R] The defaults for these two options are 70% and 40% +respectively. +Because performance sacrifices can occur when using these small +settings, you should optimize for a small footprint by reducing these +settings as much as possible without introducing unacceptable +performance degradation. +.RE +.SH EXIT STATUS +The following exit values are typically returned by the launcher when +the launcher is called with the wrong arguments, serious errors, or +exceptions thrown by the JVM. +However, a Java application may choose to return any value by using the +API call \f[CR]System.exit(exitValue)\f[R]. +The values are: +.IP \(bu 2 +\f[CR]0\f[R]: Successful completion +.IP \(bu 2 +\f[CR]>0\f[R]: An error occurred diff --git a/man/javac.1 b/man/javac.1 new file mode 100644 index 000000000..262562244 --- /dev/null +++ b/man/javac.1 @@ -0,0 +1,2203 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JAVAC" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +javac \- read Java declarations and compile them into class files +.SH SYNOPSIS +\f[CR]javac\f[R] [\f[I]options\f[R]] +[\f[I]sourcefiles\-or\-classnames\f[R]] +.TP +\f[I]options\f[R] +Command\-line options. +.TP +\f[I]sourcefiles\-or\-classnames\f[R] +Source files to be compiled (for example, \f[CR]Shape.java\f[R]) or the +names of previously compiled classes to be processed for annotations +(for example, \f[CR]geometry.MyShape\f[R]). +.SH DESCRIPTION +The \f[CR]javac\f[R] command reads \f[I]source files\f[R] that contain +module, package and type declarations written in the Java programming +language, and compiles them into \f[I]class files\f[R] that run on the +Java Virtual Machine. +.PP +The \f[CR]javac\f[R] command can also \f[B]process annotations\f[R] in +Java source files and classes. +.PP +Source files must have a file name extension of \f[CR].java\f[R]. +Class files have a file name extension of \f[CR].class\f[R]. +Both source and class files normally have file names that identify the +contents. +For example, a class called \f[CR]Shape\f[R] would be declared in a +source file called \f[CR]Shape.java\f[R], and compiled into a class file +called \f[CR]Shape.class\f[R]. +.PP +There are two ways to specify source files to \f[CR]javac\f[R]: +.IP \(bu 2 +For a small number of source files, you can list their file names on the +command line. +.IP \(bu 2 +For a large number of source files, you can use the +\f[B]\f[CB]\(at\f[B]\f[BI]filename\f[B]\f[R] option on the command line +to specify an \f[I]argument file\f[R] that lists their file names. +See \f[B]Standard Options\f[R] for a description of the option and +\f[B]Command\-Line Argument Files\f[R] for a description of +\f[CR]javac\f[R] argument files. +.PP +The order of source files specified on the command line or in an +argument file is not important. +\f[CR]javac\f[R] will compile the files together, as a group, and will +automatically resolve any dependencies between the declarations in the +various source files. +.PP +\f[CR]javac\f[R] expects that source files are arranged in one or more +directory hierarchies on the file system, described in \f[B]Arrangement +of Source Code\f[R]. +.PP +To compile a source file, \f[CR]javac\f[R] needs to find the declaration +of every class or interface that is used, extended, or implemented by +the code in the source file. +This lets \f[CR]javac\f[R] check that the code has the right to access +those classes and interfaces. +Rather than specifying the source files of those classes and interfaces +explicitly, you can use command\-line options to tell \f[CR]javac\f[R] +where to search for their source files. +If you have compiled those source files previously, you can use options +to tell \f[CR]javac\f[R] where to search for the corresponding class +files. +The options, which all have names ending in \(dqpath\(dq, are described +in \f[B]Standard Options\f[R], and further described in \f[B]Configuring +a Compilation\f[R] and \f[B]Searching for Module, Package and Type +Declarations\f[R]. +.PP +By default, \f[CR]javac\f[R] compiles each source file to a class file +in the same directory as the source file. +However, it is recommended to specify a separate destination directory +with the \f[B]\f[CB]\-d\f[B]\f[R] option. +.PP +Command\-line \f[B]options\f[R] and \f[B]environment variables\f[R] also +control how \f[CR]javac\f[R] performs various tasks: +.IP \(bu 2 +Compiling code to run on earlier releases of the JDK. +.IP \(bu 2 +Compiling code to run under a debugger. +.IP \(bu 2 +Checking for stylistic issues in Java source code. +.IP \(bu 2 +Checking for problems in \f[CR]javadoc\f[R] comments +(\f[CR]/** ... */\f[R]). +.IP \(bu 2 +Processing annotations in source files and class files. +.IP \(bu 2 +Upgrading and patching modules in the compile\-time environment. +.PP +\f[CR]javac\f[R] supports \f[B]Compiling for Earlier Releases Of The +Platform\f[R] and can also be invoked from Java code using one of a +number of \f[B]APIs\f[R] +.SH OPTIONS +\f[CR]javac\f[R] provides \f[B]standard options\f[R], and \f[B]extra +options\f[R] that are either non\-standard or are for advanced use. +.PP +Some options take one or more arguments. +If an argument contains spaces or other whitespace characters, the value +should be quoted according to the conventions of the environment being +used to invoke javac. +If the option begins with a single dash (\f[CR]\-\f[R]) the argument +should either directly follow the option name, or should be separated +with a colon (\f[CR]:\f[R]) or whitespace, depending on the option. +If the option begins with a double dash (\f[CR]\-\-\f[R]), the argument +may be separated either by whitespace or by an equals (\f[CR]=\f[R]) +character with no additional whitespace. +For example, +.IP +.EX +\-Aname=\(dqJ. Duke\(dq +\-proc:only +\-d myDirectory +\-\-module\-version 3 +\-\-module\-version=3 +.EE +.PP +In the following lists of options, an argument of \f[I]path\f[R] +represents a search path, composed of a list of file system locations +separated by the platform path separator character, (semicolon +\f[CR];\f[R] on Windows, or colon \f[CR]:\f[R] on other systems.) +Depending on the option, the file system locations may be directories, +JAR files or JMOD files. +.SS Standard Options +.TP +\f[CR]\(at\f[R]\f[I]filename\f[R] +Reads options and file names from a file. +To shorten or simplify the \f[CR]javac\f[R] command, you can specify one +or more files that contain arguments to the \f[CR]javac\f[R] command +(except \f[B]\f[CB]\-J\f[B]\f[R] options). +This lets you to create \f[CR]javac\f[R] commands of any length on any +operating system. +See \f[B]Command\-Line Argument Files\f[R]. +.TP +\f[CR]\-A\f[R]\f[I]key\f[R][\f[CR]=\f[R]\f[I]value\f[R]] +Specifies options to pass to annotation processors. +These options are not interpreted by \f[CR]javac\f[R] directly, but are +made available for use by individual processors. +The \f[I]key\f[R] value should be one or more identifiers separated by a +dot (\f[CR].\f[R]). +.TP +\f[CR]\-\-add\-modules\f[R] \f[I]module\f[R]\f[CR],\f[R]\f[I]module\f[R] +Specifies root modules to resolve in addition to the initial modules, or +all modules on the module path if \f[I]module\f[R] is +\f[CR]ALL\-MODULE\-PATH\f[R]. +.TP +\f[CR]\-\-boot\-class\-path\f[R] \f[I]path\f[R] or \f[CR]\-bootclasspath\f[R] \f[I]path\f[R] +Overrides the location of the bootstrap class files. +.RS +\f[B]Note:\f[R] This can only be used when compiling for releases prior +to JDK 9. +As applicable, see the descriptions in \f[B]\f[CB]\-\-release\f[B]\f[R], +\f[B]\f[CB]\-source\f[B]\f[R], or \f[B]\f[CB]\-target\f[B]\f[R] for +details. +For JDK 9 or later, see \f[B]\f[CB]\-\-system\f[B]\f[R]. +.RE +.TP +\f[CR]\-\-class\-path\f[R] \f[I]path\f[R], \f[CR]\-classpath\f[R] \f[I]path\f[R], or \f[CR]\-cp\f[R] \f[I]path\f[R] +Specifies where to find user class files and annotation processors. +This class path overrides the user class path in the +\f[CR]CLASSPATH\f[R] environment variable. +.RS +.IP \(bu 2 +If \f[CR]\-\-class\-path\f[R], \f[CR]\-classpath\f[R], or +\f[CR]\-cp\f[R] are not specified, then the user class path is the value +of the \f[CR]CLASSPATH\f[R] environment variable, if that is set, or +else the current directory. +.IP \(bu 2 +If not compiling code for modules, if the +\f[B]\f[CB]\-\-source\-path\f[B]\f[R] or \-sourcepath\(ga option is not +specified, then the user class path is also searched for source files. +.IP \(bu 2 +If the \f[B]\f[CB]\-processorpath\f[B]\f[R] option is not specified, +then the class path is also searched for annotation processors. +.RE +.TP +\f[CR]\-d\f[R] \f[I]directory\f[R] +Sets the destination directory (or \f[I]class output directory\f[R]) for +class files. +If a class is part of a package, then \f[CR]javac\f[R] puts the class +file in a subdirectory that reflects the module name (if appropriate) +and package name. +The directory, and any necessary subdirectories, will be created if they +do not already exist. +.RS +If the \f[CR]\-d\f[R] option is not specified, then \f[CR]javac\f[R] +puts each class file in the same directory as the source file from which +it was generated. +Except when compiling code for multiple modules, the contents of the +class output directory will be organized in a package hierarchy. +When compiling code for multiple modules, the contents of the output +directory will be organized in a module hierarchy, with the contents of +each module in a separate subdirectory, each organized as a package +hierarchy. +\f[B]Note:\f[R] When compiling code for one or more modules, the class +output directory will automatically be checked when searching for +previously compiled classes. +When not compiling for modules, for backwards compatibility, the +directory is \f[I]not\f[R] automatically checked for previously compiled +classes, and so it is recommended to specify the class output directory +as one of the locations on the user class path, using the +\f[CR]\-\-class\-path\f[R] option or one of its alternate forms. +.RE +.TP +\f[CR]\-deprecation\f[R] +Shows a description of each use or override of a deprecated member or +class. +Without the \f[CR]\-deprecation\f[R] option, \f[CR]javac\f[R] shows a +summary of the source files that use or override deprecated members or +classes. +The \f[CR]\-deprecation\f[R] option is shorthand for +\f[CR]\-Xlint:deprecation\f[R]. +.TP +\f[CR]\-\-enable\-preview\f[R] +Enables preview language features. +Used in conjunction with either \f[B]\f[CB]\-source\f[B]\f[R] or +\f[B]\f[CB]\-\-release\f[B]\f[R]. +.TP +\f[CR]\-encoding\f[R] \f[I]encoding\f[R] +Specifies character encoding used by source files, such as EUC\-JP and +UTF\-8. +If the \f[CR]\-encoding\f[R] option is not specified, then the platform +default converter is used. +.TP +\f[CR]\-endorseddirs\f[R] \f[I]directories\f[R] +Overrides the location of the endorsed standards path. +.RS +\f[B]Note:\f[R] This can only be used when compiling for releases prior +to JDK 9. +As applicable, see the descriptions in \f[B]\f[CB]\-\-release\f[B]\f[R], +\f[B]\f[CB]\-source\f[B]\f[R], or \f[B]\f[CB]\-target\f[B]\f[R] for +details. +.RE +.TP +\f[CR]\-extdirs\f[R] \f[I]directories\f[R] +Overrides the location of the installed extensions. +\f[CR]directories\f[R] is a list of directories, separated by the +platform path separator (\f[CR];\f[R] on Windows, and \f[CR]:\f[R] +otherwise). +Each JAR file in the specified directories is searched for class files. +All JAR files found become part of the class path. +.RS +If you are compiling for a release of the platform that supports the +Extension Mechanism, then this option specifies the directories that +contain the extension classes. +See [Compiling for Other Releases of the Platform]. +\f[B]Note:\f[R] This can only be used when compiling for releases prior +to JDK 9. +As applicable, see the descriptions in \f[B]\f[CB]\-\-release\f[B]\f[R], +\f[B]\f[CB]\-source\f[B]\f[R], or \f[B]\f[CB]\-target\f[B]\f[R] for +details. +.RE +.TP +\f[CR]\-g\f[R] +Generates all debugging information, including local variables. +By default, only line number and source file information is generated. +.TP +\f[CR]\-g:\f[R][\f[CR]lines\f[R], \f[CR]vars\f[R], \f[CR]source\f[R]] +Generates only the kinds of debugging information specified by the +comma\-separated list of keywords. +Valid keywords are: +.RS +.TP +\f[CR]lines\f[R] +Line number debugging information. +.TP +\f[CR]vars\f[R] +Local variable debugging information. +.TP +\f[CR]source\f[R] +Source file debugging information. +.RE +.TP +\f[CR]\-g:none\f[R] +Does not generate debugging information. +.TP +\f[CR]\-h\f[R] \f[I]directory\f[R] +Specifies where to place generated native header files. +.RS +When you specify this option, a native header file is generated for each +class that contains native methods or that has one or more constants +annotated with the \f[B]\f[CB]java.lang.annotation.Native\f[B]\f[R] +annotation. +If the class is part of a package, then the compiler puts the native +header file in a subdirectory that reflects the module name (if +appropriate) and package name. +The directory, and any necessary subdirectories, will be created if they +do not already exist. +.RE +.TP +\f[CR]\-\-help\f[R], \f[CR]\-help\f[R] or \f[CR]\-?\f[R] +Prints a synopsis of the standard options. +.TP +\f[CR]\-\-help\-extra\f[R] or \f[CR]\-X\f[R] +Prints a synopsis of the set of extra options. +.TP +\f[CR]\-\-help\-lint\f[R] +Prints the supported keys for the \f[CR]\-Xlint\f[R] option. +.TP +\f[CR]\-implicit:\f[R][\f[CR]none\f[R], \f[CR]class\f[R]] +Specifies whether or not to generate class files for implicitly +referenced files: +.RS +.IP \(bu 2 +\f[CR]\-implicit:class\f[R] \-\-\- Automatically generates class files. +.IP \(bu 2 +\f[CR]\-implicit:none\f[R] \-\-\- Suppresses class file generation. +If this option is not specified, then the default automatically +generates class files. +In this case, the compiler issues a warning if any class files are +generated when also doing annotation processing. +The warning is not issued when the \f[CR]\-implicit\f[R] option is +explicitly set. +See \f[B]Searching for Module, Package and Type Declarations\f[R]. +.RE +.TP +\f[CR]\-J\f[R]\f[I]option\f[R] +Passes \f[I]option\f[R] to the runtime system, where \f[I]option\f[R] is +one of the Java options described on \f[B]java\f[R] command. +For example, \f[CR]\-J\-Xms48m\f[R] sets the startup memory to 48 MB. +.RS +\f[B]Note:\f[R] The \f[CR]CLASSPATH\f[R] environment variable, +\f[CR]\-classpath\f[R] option, \f[CR]\-bootclasspath\f[R] option, and +\f[CR]\-extdirs\f[R] option do not specify the classes used to run +\f[CR]javac\f[R]. +Trying to customize the compiler implementation with these options and +variables is risky and often does not accomplish what you want. +If you must customize the compiler implementation, then use the +\f[CR]\-J\f[R] option to pass options through to the underlying Java +launcher. +.RE +.TP +\f[CR]\-\-limit\-modules\f[R] \f[I]module\f[R]\f[CR],\f[R]\f[I]module\f[R]* +Limits the universe of observable modules. +.TP +\f[CR]\-\-module\f[R] \f[I]module\-name\f[R] (\f[CR],\f[R]\f[I]module\-name\f[R])* or \f[CR]\-m\f[R] \f[I]module\-name\f[R] (\f[CR],\f[R]\f[I]module\-name\f[R])* +Compiles those source files in the named modules that are newer than the +corresponding files in the output directory. +.TP +\f[CR]\-\-module\-path\f[R] \f[I]path\f[R] or \f[CR]\-p\f[R] \f[I]path\f[R] +Specifies where to find application modules. +.TP +\f[CR]\-\-module\-source\-path\f[R] \f[I]module\-source\-path\f[R] +Specifies where to find source files when compiling code in multiple +modules. +See \f[B]The Module Source Path Option\f[R]. +.TP +\f[CR]\-\-module\-version\f[R] \f[I]version\f[R] +Specifies the version of modules that are being compiled. +.TP +\f[CR]\-nowarn\f[R] +Generate only mandatory warnings. +.TP +\f[CR]\-parameters\f[R] +Generates metadata for reflection on method parameters. +Stores formal parameter names of constructors and methods in the +generated class file so that the method +\f[CR]java.lang.reflect.Executable.getParameters\f[R] from the +Reflection API can retrieve them. +.TP +\f[CR]\-proc:\f[R][\f[CR]none\f[R], \f[CR]only\f[R], \f[CR]full\f[R]] +Controls whether annotation processing and compilation are done. +.RS +.IP \(bu 2 +\f[CR]\-proc:none\f[R] means that compilation takes place without +annotation processing +.IP \(bu 2 +\f[CR]\-proc:only\f[R] means that only annotation processing is done, +without any subsequent compilation. +.IP \(bu 2 +\f[CR]\-proc:full\f[R] means annotation processing and compilation are +done. +If this option is not used, annotation processing and compilation are +done if at least one other option is used to explicitly configure +annotation processing. +.RE +.TP +\f[CR]\-processor\f[R] \f[I]class1\f[R][\f[CR],\f[R]\f[I]class2\f[R]\f[CR],\f[R]\f[I]class3\f[R]...] +Names of the annotation processors to run. +This bypasses the default discovery process. +.TP +\f[CR]\-\-processor\-module\-path\f[R] \f[I]path\f[R] +Specifies the module path used for finding annotation processors. +.TP +\f[CR]\-\-processor\-path\f[R] \f[I]path\f[R] or \f[CR]\-processorpath\f[R] \f[I]path\f[R] +Specifies where to find annotation processors. +If this option is not used, then the class path is searched for +processors. +.TP +\f[CR]\-profile\f[R] \f[I]profile\f[R] +Checks that the API used is available in the specified profile. +This option is deprecated and may be removed in a future release. +.RS +\f[B]Note:\f[R] This can only be used when compiling for releases prior +to JDK 9. +As applicable, see the descriptions in \f[B]\f[CB]\-\-release\f[B]\f[R], +\f[B]\f[CB]\-source\f[B]\f[R], or \f[B]\f[CB]\-target\f[B]\f[R] for +details. +.RE +.TP +\f[CR]\-\-release\f[R] \f[I]release\f[R] +Compiles source code according to the rules of the Java programming +language for the specified Java SE release, generating class files which +target that release. +Source code is compiled against the combined Java SE and JDK API for the +specified release. +.RS +The supported values of \f[I]release\f[R] are the current Java SE +release and a limited number of previous releases, detailed in the +command\-line help. +For the current release, the Java SE API consists of the +\f[CR]java.*\f[R], \f[CR]javax.*\f[R], and \f[CR]org.*\f[R] packages +that are exported by the Java SE modules in the release; the JDK API +consists of the \f[CR]com.*\f[R] and \f[CR]jdk.*\f[R] packages that are +exported by the JDK modules in the release, plus the \f[CR]javax.*\f[R] +packages that are exported by standard, but non\-Java SE, modules in the +release. +For previous releases, the Java SE API and the JDK API are as defined in +that release. +\f[B]Note:\f[R] When using \f[CR]\-\-release\f[R], you cannot also use +the \f[B]\f[CB]\-\-source\f[B]\f[R]/\f[CR]\-source\f[R] or +\f[B]\f[CB]\-\-target\f[B]\f[R]/\f[CR]\-target\f[R] options. +\f[B]Note:\f[R] When using \f[CR]\-\-release\f[R] to specify a release +that supports the Java Platform Module System, the +\f[CR]\-\-add\-exports\f[R] option cannot be used to enlarge the set of +packages exported by the Java SE, JDK, and standard modules in the +specified release. +.RE +.TP +\f[CR]\-s\f[R] \f[I]directory\f[R] +Specifies the directory used to place the generated source files. +If a class is part of a package, then the compiler puts the source file +in a subdirectory that reflects the module name (if appropriate) and +package name. +The directory, and any necessary subdirectories, will be created if they +do not already exist. +.RS +Except when compiling code for multiple modules, the contents of the +source output directory will be organized in a package hierarchy. +When compiling code for multiple modules, the contents of the source +output directory will be organized in a module hierarchy, with the +contents of each module in a separate subdirectory, each organized as a +package hierarchy. +.RE +.TP +\f[CR]\-\-source\f[R] \f[I]release\f[R] or \f[CR]\-source\f[R] \f[I]release\f[R] +Compiles source code according to the rules of the Java programming +language for the specified Java SE release. +The supported values of \f[I]release\f[R] are the current Java SE +release and a limited number of previous releases, detailed in the +command\-line help. +.RS +If the option is not specified, the default is to compile source code +according to the rules of the Java programming language for the current +Java SE release. +.RE +.TP +\f[CR]\-\-source\-path\f[R] \f[I]path\f[R] or \f[CR]\-sourcepath\f[R] \f[I]path\f[R] +Specifies where to find source files. +Except when compiling multiple modules together, this is the source code +path used to search for class or interface definitions. +.RS +\f[B]Note:\f[R] Classes found through the class path might be recompiled +when their source files are also found. +See \f[B]Searching for Module, Package and Type Declarations\f[R]. +.RE +.TP +\f[CR]\-\-system\f[R] \f[I]jdk\f[R] | \f[CR]none\f[R] +Overrides the location of system modules. +.TP +\f[CR]\-\-target\f[R] \f[I]release\f[R] or \f[CR]\-target\f[R] \f[I]release\f[R] +Generates \f[CR]class\f[R] files suitable for the specified Java SE +release. +The supported values of \f[I]release\f[R] are the current Java SE +release and a limited number of previous releases, detailed in the +command\-line help. +.RS +\f[B]Note:\f[R] The target release must be equal to or higher than the +source release. +(See \f[B]\f[CB]\-\-source\f[B]\f[R].) +.RE +.TP +\f[CR]\-\-upgrade\-module\-path\f[R] \f[I]path\f[R] +Overrides the location of upgradeable modules. +.TP +\f[CR]\-verbose\f[R] +Outputs messages about what the compiler is doing. +Messages include information about each class loaded and each source +file compiled. +.TP +\f[CR]\-\-version\f[R] or \f[CR]\-version\f[R] +Prints version information. +.TP +\f[CR]\-Werror\f[R] +Terminates compilation when warnings occur. +.SS Extra Options +.TP +\f[CR]\-\-add\-exports\f[R] \f[I]module\f[R]\f[CR]/\f[R]\f[I]package\f[R]\f[CR]=\f[R]\f[I]other\-module\f[R](\f[CR],\f[R]\f[I]other\-module\f[R])* +Specifies a package to be considered as exported from its defining +module to additional modules or to all unnamed modules when the value of +\f[I]other\-module\f[R] is \f[CR]ALL\-UNNAMED\f[R]. +.TP +\f[CR]\-\-add\-reads\f[R] \f[I]module\f[R]\f[CR]=\f[R]\f[I]other\-module\f[R](\f[CR],\f[R]\f[I]other\-module\f[R])* +Specifies additional modules to be considered as required by a given +module. +.TP +\f[CR]\-\-default\-module\-for\-created\-files\f[R] \f[I]module\-name\f[R] +Specifies the fallback target module for files created by annotation +processors, if none is specified or inferred. +.TP +\f[CR]\-\-disable\-line\-doc\-comments\f[R] +Disables support for documentation comments with lines beginning ///. +.TP +\f[CR]\-Djava.endorsed.dirs=\f[R]\f[I]dirs\f[R] +Overrides the location of the endorsed standards path. +.RS +\f[B]Note:\f[R] This can only be used when compiling for releases prior +to JDK 9. +As applicable, see the descriptions in \f[B]\f[CB]\-\-release\f[B]\f[R], +\f[B]\f[CB]\-source\f[B]\f[R], or \f[B]\f[CB]\-target\f[B]\f[R] for +details. +.RE +.TP +\f[CR]\-Djava.ext.dirs=\f[R]\f[I]dirs\f[R] +Overrides the location of installed extensions. +.RS +\f[B]Note:\f[R] This can only be used when compiling for releases prior +to JDK 9. +As applicable, see the descriptions in \f[B]\f[CB]\-\-release\f[B]\f[R], +\f[B]\f[CB]\-source\f[B]\f[R], or \f[B]\f[CB]\-target\f[B]\f[R] for +details. +.RE +.TP +\f[CR]\-\-patch\-module\f[R] \f[I]module\f[R]\f[CR]=\f[R]\f[I]path\f[R] +Overrides or augments a module with classes and resources in JAR files +or directories. +.TP +\f[CR]\-Xbootclasspath:\f[R]\f[I]path\f[R] +Overrides the location of the bootstrap class files. +.RS +\f[B]Note:\f[R] This can only be used when compiling for releases prior +to JDK 9. +As applicable, see the descriptions in \f[B]\f[CB]\-\-release\f[B]\f[R], +\f[B]\f[CB]\-source\f[B]\f[R], or \f[B]\f[CB]\-target\f[B]\f[R] for +details. +.RE +.TP +\f[CR]\-Xbootclasspath/a:\f[R]\f[I]path\f[R] +Adds a suffix to the bootstrap class path. +.RS +\f[B]Note:\f[R] This can only be used when compiling for releases prior +to JDK 9. +As applicable, see the descriptions in \f[B]\f[CB]\-\-release\f[B]\f[R], +\f[B]\f[CB]\-source\f[B]\f[R], or \f[B]\f[CB]\-target\f[B]\f[R] for +details. +.RE +.TP +\f[CR]\-Xbootclasspath/p:\f[R]\f[I]path\f[R] +Adds a prefix to the bootstrap class path. +.RS +\f[B]Note:\f[R] This can only be used when compiling for releases prior +to JDK 9. +As applicable, see the descriptions in \f[B]\f[CB]\-\-release\f[B]\f[R], +\f[B]\f[CB]\-source\f[B]\f[R], or \f[B]\f[CB]\-target\f[B]\f[R] for +details. +.RE +.TP +\f[CR]\-Xdiags:\f[R][\f[CR]compact\f[R], \f[CR]verbose\f[R]] +Selects a diagnostic mode. +.TP +\f[CR]\-Xdoclint\f[R] +Enables recommended checks for problems in documentation comments. +.TP +\f[CR]\-Xdoclint:\f[R](\f[CR]all\f[R]|\f[CR]none\f[R]|[\f[CR]\-\f[R]]\f[I]group\f[R])[\f[CR]/\f[R]\f[I]access\f[R]] +Enables or disables specific groups of checks in documentation comments. +.RS +\f[I]group\f[R] can have one of the following values: +\f[CR]accessibility\f[R], \f[CR]html\f[R], \f[CR]missing\f[R], +\f[CR]reference\f[R], \f[CR]syntax\f[R]. +The variable \f[I]access\f[R] specifies the minimum visibility level of +classes and members that the \f[CR]\-Xdoclint\f[R] option checks. +It can have one of the following values (in order of most to least +visible): \f[CR]public\f[R], \f[CR]protected\f[R], \f[CR]package\f[R], +\f[CR]private\f[R]. +The default \f[I]access\f[R] level is \f[CR]private\f[R]. +When prefixed by \f[CR]doclint:\f[R], the \f[I]group\f[R] names and +\f[CR]all\f[R] can be used with \f[CR]\(atSuppressWarnings\f[R] to +suppress warnings about documentation comments in parts of the code +being compiled. +For more information about these groups of checks, see the +\f[B]DocLint\f[R] section of the \f[CR]javadoc\f[R] command +documentation. +The \f[CR]\-Xdoclint\f[R] option is disabled by default in the +\f[CR]javac\f[R] command. +For example, the following option checks classes and members (with all +groups of checks) that have the access level of protected and higher +(which includes protected and public): +.RS +.PP +\f[CR]\-Xdoclint:all/protected\f[R] +.RE +The following option enables all groups of checks for all access levels, +except it will not check for HTML errors for classes and members that +have the access level of package and higher (which includes package, +protected and public): +.RS +.PP +\f[CR]\-Xdoclint:all,\-html/package\f[R] +.RE +.RE +.TP +\f[CR]\-Xdoclint/package:\f[R][\f[CR]\-\f[R]]\f[I]packages\f[R](\f[CR],\f[R][\f[CR]\-\f[R]]\f[I]package\f[R])* +Enables or disables checks in specific packages. +Each \f[I]package\f[R] is either the qualified name of a package or a +package name prefix followed by \f[CR].*\f[R], which expands to all +sub\-packages of the given package. +Each \f[I]package\f[R] can be prefixed with a hyphen (\f[CR]\-\f[R]) to +disable checks for a specified package or packages. +.RS +For more information, see the \f[B]DocLint\f[R] section of the +\f[CR]javadoc\f[R] command documentation. +.RE +.TP +\f[CR]\-Xlint\f[R] +Enables all recommended warnings. +In this release, enabling all available warnings is recommended. +.TP +\f[CR]\-Xlint:\f[R][\f[CR]\-\f[R]]\f[I]key\f[R](\f[CR],\f[R][\f[CR]\-\f[R]]\f[I]key\f[R])* +Enables and/or disables warning categories using the one or more of the +keys described below separated by commas. +The keys \f[CR]all\f[R] and \f[CR]none\f[R] enable or disable all +categories (respectively); other keys enable the corresponding category, +or disable it if preceded by a hyphen (\f[CR]\-\f[R]). +.RS +Supported values for \f[I]key\f[R] are: +.IP \(bu 2 +\f[CR]all\f[R]: Enables all warning categories. +.IP \(bu 2 +\f[CR]auxiliaryclass\f[R]: Warns about an auxiliary class that is hidden +in a source file, and is used from other files. +.IP \(bu 2 +\f[CR]cast\f[R]: Warns about the use of unnecessary casts. +.IP \(bu 2 +\f[CR]classfile\f[R]: Warns about the issues related to classfile +contents. +.IP \(bu 2 +\f[CR]dangling\-doc\-comments\f[R]: Warns about extra or misplaced +documentation comments near the beginning of a declaration. +.IP \(bu 2 +\f[CR]deprecation\f[R]: Warns about the use of deprecated items. +.IP \(bu 2 +\f[CR]dep\-ann\f[R]: Warns about the items marked as deprecated in +\f[CR]javadoc\f[R] but without the \f[CR]\(atDeprecated\f[R] annotation. +.IP \(bu 2 +\f[CR]divzero\f[R]: Warns about the division by the constant integer 0. +.IP \(bu 2 +\f[CR]empty\f[R]: Warns about an empty statement after \f[CR]if\f[R]. +.IP \(bu 2 +\f[CR]exports\f[R]: Warns about the issues regarding module exports. +.IP \(bu 2 +\f[CR]fallthrough\f[R]: Warns about the falling through from one case of +a switch statement to the next. +.IP \(bu 2 +\f[CR]finally\f[R]: Warns about \f[CR]finally\f[R] clauses that do not +terminate normally. +.IP \(bu 2 +\f[CR]identity\f[R]: Warns about use of a value\-based class where an +identity class is expected +.IP \(bu 2 +\f[CR]incubating\f[R]: Warns about the use of incubating modules. +.IP \(bu 2 +\f[CR]lossy\-conversions\f[R]: Warns about possible lossy conversions in +compound assignment. +.IP \(bu 2 +\f[CR]missing\-explicit\-ctor\f[R]: Warns about missing explicit +constructors in public and protected classes in exported packages. +.IP \(bu 2 +\f[CR]module\f[R]: Warns about the module system\-related issues. +.IP \(bu 2 +\f[CR]opens\f[R]: Warns about the issues related to module opens. +.IP \(bu 2 +\f[CR]options\f[R]: Warns about the issues relating to use of command +line options. +.IP \(bu 2 +\f[CR]output\-file\-clash\f[R]: Warns if any output file is overwritten +during compilation. +This can occur, for example, on case\-insensitive filesystems. +.IP \(bu 2 +\f[CR]overloads\f[R]: Warns about the issues related to method +overloads. +.IP \(bu 2 +\f[CR]overrides\f[R]: Warns about the issues related to method +overrides. +.IP \(bu 2 +\f[CR]path\f[R]: Warns about the invalid path elements on the command +line. +.IP \(bu 2 +\f[CR]preview\f[R]: Warns about the use of preview language features. +.IP \(bu 2 +\f[CR]processing\f[R]: Warns about the issues related to annotation +processing. +.IP \(bu 2 +\f[CR]rawtypes\f[R]: Warns about the use of raw types. +.IP \(bu 2 +\f[CR]removal\f[R]: Warns about the use of an API that has been marked +for removal. +.IP \(bu 2 +\f[CR]restricted\f[R]: Warns about the use of restricted methods. +.IP \(bu 2 +\f[CR]requires\-automatic\f[R]: Warns developers about the use of +automatic modules in requires clauses. +.IP \(bu 2 +\f[CR]requires\-transitive\-automatic\f[R]: Warns about automatic +modules in requires transitive. +.IP \(bu 2 +\f[CR]serial\f[R]: Warns about the serializable classes that do not +provide a serial version ID. +Also warns about access to non\-public members from a serializable +element. +.IP \(bu 2 +\f[CR]static\f[R]: Warns about the accessing a static member using an +instance. +.IP \(bu 2 +\f[CR]strictfp\f[R]: Warns about unnecessary use of the +\f[CR]strictfp\f[R] modifier. +.IP \(bu 2 +\f[CR]synchronization\f[R]: Warns about synchronization attempts on +instances of value\-based classes. +This key is a deprecated alias for \f[CR]identity\f[R], which has the +same uses and effects. +Users are encouraged to use the \f[CR]identity\f[R] category for all +future and existing uses of \f[CR]synchronization\f[R]. +.IP \(bu 2 +\f[CR]text\-blocks\f[R]: Warns about inconsistent white space characters +in text block indentation. +.IP \(bu 2 +\f[CR]this\-escape\f[R]: Warns about constructors leaking +\f[CR]this\f[R] prior to subclass initialization. +.IP \(bu 2 +\f[CR]try\f[R]: Warns about the issues relating to the use of try blocks +(that is, try\-with\-resources). +.IP \(bu 2 +\f[CR]unchecked\f[R]: Warns about the unchecked operations. +.IP \(bu 2 +\f[CR]varargs\f[R]: Warns about the potentially unsafe \f[CR]vararg\f[R] +methods. +.IP \(bu 2 +\f[CR]none\f[R]: Disables all warning categories. +With the exception of \f[CR]all\f[R] and \f[CR]none\f[R], the keys can +be used with the \f[CR]\(atSuppressWarnings\f[R] annotation to suppress +warnings in a part of the source code being compiled. +See \f[B]Examples of Using \-Xlint keys\f[R]. +.RE +.TP +\f[CR]\-Xmaxerrs\f[R] \f[I]number\f[R] +Sets the maximum number of errors to print. +.TP +\f[CR]\-Xmaxwarns\f[R] \f[I]number\f[R] +Sets the maximum number of warnings to print. +.TP +\f[CR]\-Xpkginfo:\f[R][\f[CR]always\f[R], \f[CR]legacy\f[R], \f[CR]nonempty\f[R]] +Specifies when and how the \f[CR]javac\f[R] command generates +\f[CR]package\-info.class\f[R] files from \f[CR]package\-info.java\f[R] +files using one of the following options: +.RS +.TP +\f[CR]always\f[R] +Generates a \f[CR]package\-info.class\f[R] file for every +\f[CR]package\-info.java\f[R] file. +This option may be useful if you use a build system such as Ant, which +checks that each \f[CR].java\f[R] file has a corresponding +\f[CR].class\f[R] file. +.TP +\f[CR]legacy\f[R] +Generates a \f[CR]package\-info.class\f[R] file only if +\f[CR]package\-info.java\f[R] contains annotations. +This option does not generate a \f[CR]package\-info.class\f[R] file if +\f[CR]package\-info.java\f[R] contains only comments. +.RS +\f[B]Note:\f[R] A \f[CR]package\-info.class\f[R] file might be generated +but be empty if all the annotations in the \f[CR]package\-info.java\f[R] +file have \f[CR]RetentionPolicy.SOURCE\f[R]. +.RE +.TP +\f[CR]nonempty\f[R] +Generates a \f[CR]package\-info.class\f[R] file only if +\f[CR]package\-info.java\f[R] contains annotations with +\f[CR]RetentionPolicy.CLASS\f[R] or \f[CR]RetentionPolicy.RUNTIME\f[R]. +.RE +.TP +\f[CR]\-Xplugin:\f[R]\f[I]name\f[R] \f[I]args\f[R] +Specifies the name and optional arguments for a plug\-in to be run. +If \f[I]args\f[R] are provided, \f[I]name\f[R] and \f[I]args\f[R] should +be quoted or otherwise escape the whitespace characters between the name +and all the arguments. +For details on the API for a plugin, see the API documentation for +\f[B]jdk.compiler/com.sun.source.util.Plugin\f[R]. +.TP +\f[CR]\-Xprefer:\f[R][\f[CR]source\f[R], \f[CR]newer\f[R]] +Specifies which file to read when both a source file and class file are +found for an implicitly compiled class using one of the following +options. +See \f[B]Searching for Module, Package and Type Declarations\f[R]. +.RS +.IP \(bu 2 +\f[CR]\-Xprefer:newer\f[R]: Reads the newer of the source or class files +for a type (default). +.IP \(bu 2 +\f[CR]\-Xprefer:source\f[R] : Reads the source file. +Use \f[CR]\-Xprefer:source\f[R] when you want to be sure that any +annotation processors can access annotations declared with a retention +policy of \f[CR]SOURCE\f[R]. +.RE +.TP +\f[CR]\-Xprint\f[R] +Prints a textual representation of specified types for debugging +purposes. +This does not perform annotation processing or compilation. +The format of the output could change. +.TP +\f[CR]\-XprintProcessorInfo\f[R] +Prints information about which annotations a processor is asked to +process. +.TP +\f[CR]\-XprintRounds\f[R] +Prints information about initial and subsequent annotation processing +rounds. +.TP +\f[CR]\-Xstdout\f[R] \f[I]filename\f[R] +Sends compiler messages to the named file. +By default, compiler messages go to \f[CR]System.err\f[R]. +.SH ENVIRONMENT VARIABLES +.SS CLASSPATH +If the \f[B]\f[CB]\-\-class\-path\f[B]\f[R] option or any of its +alternate forms are not specified, the class path will default to the +value of the \f[CR]CLASSPATH\f[R] environment variable if it is set. +However, it is recommended that this environment variable should +\f[I]not\f[R] be set, and that the \f[CR]\-\-class\-path\f[R] option +should be used to provide an explicit value for the class path when one +is required. +.SS JDK_JAVAC_OPTIONS +The content of the \f[CR]JDK_JAVAC_OPTIONS\f[R] environment variable, +separated by white\-spaces ( ) or white\-space characters +(\f[CR]\(rsn\f[R], \f[CR]\(rst\f[R], \f[CR]\(rsr\f[R], or +\f[CR]\(rsf\f[R]) is prepended to the command line arguments passed to +\f[CR]javac\f[R] as a list of arguments. +.PP +The encoding requirement for the environment variable is the same as the +\f[CR]javac\f[R] command line on the system. +\f[CR]JDK_JAVAC_OPTIONS\f[R] environment variable content is treated in +the same manner as that specified in the command line. +.PP +Single quotes (\f[CR]\(aq\f[R]) or double quotes (\f[CR]\(dq\f[R]) can +be used to enclose arguments that contain whitespace characters. +All content between the open quote and the first matching close quote +are preserved by simply removing the pair of quotes. +In case a matching quote is not found, the launcher will abort with an +error message. +\f[CR]\(at\f[R]\f[I]files\f[R] are supported as they are specified in +the command line. +However, as in \f[CR]\(at\f[R]\f[I]files\f[R], use of a wildcard is not +supported. +.PP +\f[B]Examples of quoting arguments containing white spaces:\f[R] +.RS +.PP +\f[CR]export JDK_JAVAC_OPTIONS=\(aq\(at\(dqC:\(rswhite spaces\(rsargfile\(dq\(aq\f[R] +.RE +.RS +.PP +\f[CR]export JDK_JAVAC_OPTIONS=\(aq\(dq\(atC:\(rswhite spaces\(rsargfile\(dq\(aq\f[R] +.RE +.RS +.PP +\f[CR]export JDK_JAVAC_OPTIONS=\(aq\(atC:\(rs\(dqwhite spaces\(dq\(rsargfile\(aq\f[R] +.RE +.SH COMMAND\-LINE ARGUMENT FILES +An argument file can include command\-line options and source file names +in any combination. +The arguments within a file can be separated by spaces or new line +characters. +If a file name contains embedded spaces, then put the whole file name in +double quotation marks. +.PP +File names within an argument file are relative to the current +directory, not to the location of the argument file. +Wildcards (\f[CR]*\f[R]) are not allowed in these lists (such as for +specifying \f[CR]*.java\f[R]). +Use of the at sign (\f[CR]\(at\f[R]) to recursively interpret files is +not supported. +The \f[CR]\-J\f[R] options are not supported because they\(aqre passed +to the launcher, which does not support argument files. +.PP +When executing the \f[CR]javac\f[R] command, pass in the path and name +of each argument file with the at sign (\f[CR]\(at\f[R]) leading +character. +When the \f[CR]javac\f[R] command encounters an argument beginning with +the at sign (\f[CR]\(at\f[R]), it expands the contents of that file into +the argument list. +.SS Examples of Using javac \(atfilename +.TP +Single Argument File +You could use a single argument file named \f[CR]argfile\f[R] to hold +all \f[CR]javac\f[R] arguments: +.RS +.RS +.PP +\f[CR]javac \(atargfile\f[R] +.RE +This argument file could contain the contents of both files shown in the +following \f[B]Two Argument Files\f[R] example. +.RE +.TP +Two Argument Files +You can create two argument files: one for the \f[CR]javac\f[R] options +and the other for the source file names. +Note that the following lists have no line\-continuation characters. +.RS +Create a file named \f[CR]options\f[R] that contains the following: +\f[B]Linux and macOS:\f[R] +.IP +.EX +\-d classes +\-g +\-sourcepath /java/pubs/ws/1.3/src/share/classes +.EE +\f[B]Windows:\f[R] +.IP +.EX +\-d classes +\-g +\-sourcepath C:\(rsjava\(rspubs\(rsws\(rs1.3\(rssrc\(rsshare\(rsclasses +.EE +Create a file named \f[CR]sources\f[R] that contains the following: +.IP +.EX +MyClass1.java +MyClass2.java +MyClass3.java +.EE +Then, run the \f[CR]javac\f[R] command as follows: +.RS +.PP +\f[CR]javac \(atoptions \(atsources\f[R] +.RE +.RE +.TP +Argument Files with Paths +The argument files can have paths, but any file names inside the files +are relative to the current working directory (not \f[CR]path1\f[R] or +\f[CR]path2\f[R]): +.RS +.RS +.PP +\f[CR]javac \(atpath1/options \(atpath2/sources\f[R] +.RE +.RE +.SH ARRANGEMENT OF SOURCE CODE +In the Java language, classes and interfaces can be organized into +packages, and packages can be organized into modules. +\f[CR]javac\f[R] expects that the physical arrangement of source files +in directories of the file system will mirror the organization of +classes into packages, and packages into modules. +.PP +It is a widely adopted convention that module names and package names +begin with a lower\-case letter, and that class names begin with an +upper\-case letter. +.SS Arrangement of Source Code for a Package +When classes and interfaces are organized into a package, the package is +represented as a directory, and any subpackages are represented as +subdirectories. +.PP +For example: +.IP \(bu 2 +The package \f[CR]p\f[R] is represented as a directory called +\f[CR]p\f[R]. +.IP \(bu 2 +The package \f[CR]p.q\f[R] \-\- that is, the subpackage \f[CR]q\f[R] of +package \f[CR]p\f[R] \-\- is represented as the subdirectory +\f[CR]q\f[R] of directory \f[CR]p\f[R]. +The directory tree representing package \f[CR]p.q\f[R] is therefore +\f[CR]p\(rsq\f[R] on Windows, and \f[CR]p/q\f[R] on other systems. +.IP \(bu 2 +The package \f[CR]p.q.r\f[R] is represented as the directory tree +\f[CR]p\(rsq\(rsr\f[R] (on Windows) or \f[CR]p/q/r\f[R] (on other +systems). +.PP +Within a directory or subdirectory, \f[CR].java\f[R] files represent +classes and interfaces in the corresponding package or subpackage. +.PP +For example: +.IP \(bu 2 +The class \f[CR]X\f[R] declared in package \f[CR]p\f[R] is represented +by the file \f[CR]X.java\f[R] in the \f[CR]p\f[R] directory. +.IP \(bu 2 +The class \f[CR]Y\f[R] declared in package \f[CR]p.q\f[R] is represented +by the file \f[CR]Y.java\f[R] in the \f[CR]q\f[R] subdirectory of +directory \f[CR]p\f[R]. +.IP \(bu 2 +The class \f[CR]Z\f[R] declared in package \f[CR]p.q.r\f[R] is +represented by the file \f[CR]Z.java\f[R] in the \f[CR]r\f[R] +subdirectory of \f[CR]p\(rsq\f[R] (on Windows) or \f[CR]p/q\f[R] (on +other systems). +.PP +In some situations, it is convenient to split the code into separate +directories, each structured as described above, and the aggregate list +of directories specified to \f[CR]javac\f[R]. +.SS Arrangement of Source Code for a Module +In the Java language, a module is a set of packages designed for reuse. +In addition to \f[CR].java\f[R] files for classes and interfaces, each +module has a source file called \f[CR]module\-info.java\f[R] which: +.IP "1." 3 +declares the module\(aqs name; +.IP "2." 3 +lists the packages exported by the module (to allow reuse by other +modules); +.IP "3." 3 +lists other modules required by the module (to reuse their exported +packages). +.PP +When packages are organized into a module, the module is represented by +one or more directories representing the packages in the module, one of +which contains the \f[CR]module\-info.java\f[R] file. +It may be convenient, but it is not required, to use a single directory, +named after the module, to contain the \f[CR]module\-info.java\f[R] file +alongside the directory tree which represents the packages in the module +(i.e., the \f[I]package hierarchy\f[R] described above). +The exact arrangement of source code for a module is typically dictated +by the conventions adopted by a development environment (IDE) or build +system. +.PP +For example: +.IP \(bu 2 +The module \f[CR]a.b.c\f[R] may be represented by the directory +\f[CR]a.b.c\f[R], on all systems. +.IP \(bu 2 +The module\(aqs declaration is represented by the file +\f[CR]module\-info.java\f[R] in the \f[CR]a.b.c\f[R] directory. +.IP \(bu 2 +If the module contains package \f[CR]p.q.r\f[R], then the +\f[CR]a.b.c\f[R] directory contains the directory tree +\f[CR]p\(rsq\(rsr\f[R] (on Windows) or \f[CR]p/q/r\f[R] (on other +systems). +.PP +The development environment may prescribe some directory hierarchy +between the directory named for the module and the source files to be +read by \f[CR]javac\f[R]. +.PP +For example: +.IP \(bu 2 +The module \f[CR]a.b.c\f[R] may be represented by the directory +\f[CR]a.b.c\f[R] +.IP \(bu 2 +The module\(aqs declaration and the module\(aqs packages may be in some +subdirectory of \f[CR]a.b.c\f[R], such as \f[CR]src\(rsmain\(rsjava\f[R] +(on Windows) or \f[CR]src/main/java\f[R] (on other systems). +.SH CONFIGURING A COMPILATION +This section describes how to configure \f[CR]javac\f[R] to perform a +basic compilation. +.PP +See \f[B]Configuring the Module System\f[R] for additional details for +use when compiling for a release of the platform that supports modules. +.SS Source Files +.IP \(bu 2 +Specify the source files to be compiled on the command line. +.PP +If there are no compilation errors, the corresponding class files will +be placed in the \f[B]output directory\f[R]. +.PP +Some systems may limit the amount you can put on a command line; to work +around those limits, you can use \f[B]argument files\f[R]. +.PP +When compiling code for modules, you can also specify source files +indirectly, by using the \f[B]\f[CB]\-\-module\f[B]\f[R] or +\f[CR]\-m\f[R] option. +.SS Output Directory +.IP \(bu 2 +Use the \f[B]\f[CB]\-d\f[B]\f[R] option to specify an output directory +in which to put the compiled class files. +.PP +This will normally be organized in a \f[B]package hierarchy\f[R], unless +you are compiling source code from multiple modules, in which case it +will be organized as a \f[B]module hierarchy\f[R]. +.PP +When the compilation has been completed, if you are compiling one or +more modules, you can place the output directory on the module path for +the Java \f[B]launcher\f[R]; otherwise, you can place the place the +output directory on the class path for the Java launcher. +.SS Precompiled Code +The code to be compiled may refer to libraries beyond what is provided +by the platform. +If so, you must place these libraries on the class path or module path. +If the library code is not in a module, place it on the class path; if +it is in a module, place it on the module path. +.IP \(bu 2 +Use the \f[B]\f[CB]\-\-class\-path\f[B]\f[R] option to specify libraries +to be placed on the class path. +Locations on the class path should be organized in a \f[B]package +hierarchy\f[R]. +You can also use alternate forms of the option: \f[CR]\-classpath\f[R] +or \f[CR]\-cp\f[R]. +.IP \(bu 2 +Use the \f[B]\f[CB]\-\-module\-path\f[B]\f[R] option to specify +libraries to be placed on the module path. +Locations on the module path should either be modules or directories of +modules. +You can also use an alternate form of the option: \f[CR]\-p\f[R]. +.RS 2 +.PP +See \f[B]Configuring the Module System\f[R] for details on how to modify +the default configuration of library modules. +.RE +.PP +\f[B]Note\f[R]: the options for the class path and module path are not +mutually exclusive, although it is not common to specify the class path +when compiling code for one or more modules. +.SS Additional Source Files +The code to be compiled may refer to types in additional source files +that are not specified on the command line. +If so, you must put those source files on either the source path or +module path. +You can only specify one of these options: if you are not compiling code +for a module, or if you are only compiling code for a single module, use +the source path; if you are compiling code for multiple modules, use the +module source path. +.IP \(bu 2 +Use the \f[B]\f[CB]\-\-source\-path\f[B]\f[R] option to specify the +locations of additional source files that may be read by javac. +Locations on the source path should be organized in a \f[B]package +hierarchy\f[R]. +You can also use an alternate form of the option: +\f[CR]\-sourcepath\f[R]. +.IP \(bu 2 +Use the \f[B]\f[CB]\-\-module\-source\-path\f[B]\f[R] option one or more +times to specify the location of additional source files in different +modules that may be read by javac, or when compiling source files in +multiple modules. +You can either specify the locations for each module +\f[B]individually\f[R], or you can organize the source files so that you +can specify the locations all \f[B]together\f[R]. +For more details, see \f[B]The Module Source Path Option\f[R]. +.PP +If you want to be able to refer to types in additional source files but +do not want them to be compiled, use the \f[B]\f[CB]\-implicit\f[B]\f[R] +option. +.PP +\f[B]Note\f[R]: if you are compiling code for multiple modules, you must +always specify a module source path, and all source files specified on +the command line must be in one of the directories on the module source +path, or in a subdirectory thereof. +.SS Example of Compiling Multiple Source Files +This example compiles the \f[CR]Aloha.java\f[R], +\f[CR]GutenTag.java\f[R], \f[CR]Hello.java\f[R], and \f[CR]Hi.java\f[R] +source files in the \f[CR]greetings\f[R] package. +.PP +\f[B]Linux and macOS:\f[R] +.IP +.EX +% javac greetings/*.java +% ls greetings +Aloha.class GutenTag.class Hello.class Hi.class +Aloha.java GutenTag.java Hello.java Hi.java +.EE +.PP +\f[B]Windows:\f[R] +.IP +.EX +C:\(rs>javac greetings\(rs*.java +C:\(rs>dir greetings +Aloha.class GutenTag.class Hello.class Hi.class +Aloha.java GutenTag.java Hello.java Hi.java +.EE +.SS Example of Specifying a User Class Path +After changing one of the source files in the previous example, +recompile it: +.PP +\f[B]Linux and macOS:\f[R] +.IP +.EX +pwd +/examples +javac greetings/Hi.java +.EE +.PP +\f[B]Windows:\f[R] +.IP +.EX +C:\(rs>cd +\(rsexamples +C:\(rs>javac greetings\(rsHi.java +.EE +.PP +Because \f[CR]greetings.Hi\f[R] refers to other classes in the +\f[CR]greetings\f[R] package, the compiler needs to find these other +classes. +The previous example works because the default user class path is the +directory that contains the package directory. +If you want to recompile this file without concern for which directory +you are in, then add the examples directory to the user class path by +setting \f[CR]CLASSPATH\f[R]. +This example uses the \f[CR]\-classpath\f[R] option. +.PP +\f[B]Linux and macOS:\f[R] +.RS +.PP +\f[CR]javac \-classpath /examples /examples/greetings/Hi.java\f[R] +.RE +.PP +\f[B]Windows:\f[R] +.RS +.PP +\f[CR]C:\(rs>javac \-classpath \(rsexamples \(rsexamples\(rsgreetings\(rsHi.java\f[R] +.RE +.PP +If you change \f[CR]greetings.Hi\f[R] to use a banner utility, then that +utility also needs to be accessible through the user class path. +.PP +\f[B]Linux and macOS:\f[R] +.IP +.EX +javac \-classpath /examples:/lib/Banners.jar \(rs + /examples/greetings/Hi.java +.EE +.PP +\f[B]Windows:\f[R] +.IP +.EX +C:\(rs>javac \-classpath \(rsexamples;\(rslib\(rsBanners.jar \(ha + \(rsexamples\(rsgreetings\(rsHi.java +.EE +.PP +To execute a class in the \f[CR]greetings\f[R] package, the program +needs access to the \f[CR]greetings\f[R] package, and to the classes +that the \f[CR]greetings\f[R] classes use. +.PP +\f[B]Linux and macOS:\f[R] +.RS +.PP +\f[CR]java \-classpath /examples:/lib/Banners.jar greetings.Hi\f[R] +.RE +.PP +\f[B]Windows:\f[R] +.RS +.PP +\f[CR]C:\(rs>java \-classpath \(rsexamples;\(rslib\(rsBanners.jar greetings.Hi\f[R] +.RE +.SH CONFIGURING THE MODULE SYSTEM +If you want to include additional modules in your compilation, use the +\f[B]\f[CB]\-\-add\-modules\f[B]\f[R] option. +This may be necessary when you are compiling code that is not in a +module, or which is in an automatic module, and the code refers to API +in the additional modules. +.PP +If you want to restrict the set of modules in your compilation, use the +\f[B]\f[CB]\-\-limit\-modules\f[B]\f[R] option. +This may be useful if you want to ensure that the code you are compiling +is capable of running on a system with a limited set of modules +installed. +.PP +If you want to break encapsulation and specify that additional packages +should be considered as exported from a module, use the +\f[B]\f[CB]\-\-add\-exports\f[B]\f[R] option. +This may be useful when performing white\-box testing; relying on access +to internal API in production code is strongly discouraged. +.PP +If you want to specify that additional packages should be considered as +required by a module, use the \f[B]\f[CB]\-\-add\-reads\f[B]\f[R] +option. +This may be useful when performing white\-box testing; relying on access +to internal API in production code is strongly discouraged. +.PP +You can patch additional content into any module using the +\f[B]\f[CB]\-\-patch\-module\f[B]\f[R] option. +See [Patching a Module] for more details. +.SH SEARCHING FOR MODULE, PACKAGE AND TYPE DECLARATIONS +To compile a source file, the compiler often needs information about a +module or type, but the declaration is not in the source files specified +on the command line. +.PP +\f[CR]javac\f[R] needs type information for every class or interface +used, extended, or implemented in the source file. +This includes classes and interfaces not explicitly mentioned in the +source file, but that provide information through inheritance. +.PP +For example, when you create a subclass of \f[CR]java.awt.Window\f[R], +you are also using the ancestor classes of \f[CR]Window\f[R]: +\f[CR]java.awt.Container\f[R], \f[CR]java.awt.Component\f[R], and +\f[CR]java.lang.Object\f[R]. +.PP +When compiling code for a module, the compiler also needs to have +available the declaration of that module. +.PP +A successful search may produce a class file, a source file, or both. +If both are found, then you can use the \f[B]\f[CB]\-Xprefer\f[B]\f[R] +option to instruct the compiler which to use. +.PP +If a search finds and uses a source file, then by default +\f[CR]javac\f[R] compiles that source file. +This behavior can be altered with \f[B]\f[CB]\-implicit\f[B]\f[R]. +.PP +The compiler might not discover the need for some type information until +after annotation processing completes. +When the type information is found in a source file and no +\f[B]\f[CB]\-implicit\f[B]\f[R] option is specified, the compiler gives +a warning that the file is being compiled without being subject to +annotation processing. +To disable the warning, either specify the file on the command line (so +that it will be subject to annotation processing) or use the +\f[B]\f[CB]\-implicit\f[B]\f[R] option to specify whether or not class +files should be generated for such source files. +.PP +The way that \f[CR]javac\f[R] locates the declarations of those types +depends on whether the reference exists within code for a module or not. +.SS Searching Package Oriented Paths +When searching for a source or class file on a path composed of package +oriented locations, \f[CR]javac\f[R] will check each location on the +path in turn for the possible presence of the file. +The first occurrence of a particular file shadows (hides) any subsequent +occurrences of like\-named files. +This shadowing does not affect any search for any files with a different +name. +This can be convenient when searching for source files, which may be +grouped in different locations, such as shared code, platform\-specific +code and generated code. +It can also be useful when injecting alternate versions of a class file +into a package, to debugging or other instrumentation reasons. +But, it can also be dangerous, such as when putting incompatible +different versions of a library on the class path. +.SS Searching Module Oriented Paths +Prior to scanning any module paths for any package or type declarations, +\f[CR]javac\f[R] will lazily scan the following paths and locations to +determine the modules that will be used in the compilation. +.IP \(bu 2 +The module source path (see the +\f[B]\f[CB]\-\-module\-source\-path\f[B]\f[R] option) +.IP \(bu 2 +The path for upgradeable modules (see the +\f[B]\f[CB]\-\-upgrade\-module\-path\f[B]\f[R] option) +.IP \(bu 2 +The system modules (see the \f[B]\f[CB]\-\-system\f[B]\f[R] option) +.IP \(bu 2 +The user module path ( see the \f[B]\f[CB]\-\-module\-path\f[B]\f[R] +option) +.PP +For any module, the first occurrence of the module during the scan +completely shadows (hides) any subsequent appearance of a like\-named +module. +While locating the modules, \f[CR]javac\f[R] is able to determine the +packages exported by the module and to associate with each module a +package oriented path for the contents of the module. +For any previously compiled module, this path will typically be a single +entry for either a directory or a file that provides an internal +directory\-like hierarchy, such as a JAR file. +Thus, when searching for a type that is in a package that is known to be +exported by a module, \f[CR]javac\f[R] can locate the declaration +directly and efficiently. +.SS Searching for the Declaration of a Module +If the module has been previously compiled, the module declaration is +located in a file named \f[CR]module\-info.class\f[R] in the root of the +package hierarchy for the content of the module. +.PP +If the module is one of those currently being compiled, the module +declaration will be either the file named \f[CR]module\-info.class\f[R] +in the root of the package hierarchy for the module in the class output +directory, or the file named \f[CR]module\-info.java\f[R] in one of the +locations on the source path or one the module source path for the +module. +.SS Searching for the Declaration of a Type When the Reference is not in a Module +When searching for a type that is referenced in code that is not in a +module, \f[CR]javac\f[R] will look in the following places: +.IP \(bu 2 +The platform classes (or the types in exported packages of the platform +modules) (This is for compiled class files only.) +.IP \(bu 2 +Types in exported packages of any modules on the module path, if +applicable. +(This is for compiled class files only.) +.IP \(bu 2 +Types in packages on the class path and/or source path: +.RS 2 +.IP \(bu 2 +If both are specified, \f[CR]javac\f[R] looks for compiled class files +on the class path and for source files on the source path. +.IP \(bu 2 +If the class path is specified, but not source path, \f[CR]javac\f[R] +looks for both compiled class files and source files on the class path. +.IP \(bu 2 +If the class path is not specified, it defaults to the current +directory. +.RE +.PP +When looking for a type on the class path and/or source path, if both a +compiled class file and a source file are found, the most recently +modified file will be used by default. +If the source file is newer, it will be compiled and will may override +any previously compiled version of the file. +You can use the \f[B]\f[CB]\-Xprefer\f[B]\f[R] option to override the +default behavior. +.SS Searching for the Declaration of a Type When the Reference is in a Module +When searching for a type that is referenced in code in a module, +\f[CR]javac\f[R] will examine the declaration of the enclosing module to +determine if the type is in a package that is exported from another +module that is readable by the enclosing module. +If so, \f[CR]javac\f[R] will simply and directly go to the definition of +that module to find the definition of the required type. +Unless the module is another of the modules being compiled, +\f[CR]javac\f[R] will only look for compiled class files files. +In other words, \f[CR]javac\f[R] will not look for source files in +platform modules or modules on the module path. +.PP +If the type being referenced is not in some other readable module, +\f[CR]javac\f[R] will examine the module being compiled to try and find +the declaration of the type. +\f[CR]javac\f[R] will look for the declaration of the type as follows: +.IP \(bu 2 +Source files specified on the command line or on the source path or +module source path. +.IP \(bu 2 +Previously compiled files in the output directory. +.SH DIRECTORY HIERARCHIES +\f[CR]javac\f[R] generally assumes that source files and compiled class +files will be organized in a file system directory hierarchy or in a +type of file that supports in an internal directory hierarchy, such as a +JAR file. +Three different kinds of hierarchy are supported: a \f[I]package +hierarchy\f[R], a \f[I]module hierarchy\f[R], and a \f[I]module source +hierarchy\f[R]. +.PP +While \f[CR]javac\f[R] is fairly relaxed about the organization of +source code, beyond the expectation that source will be organized in one +or package hierarchies, and can generally accommodate organizations +prescribed by development environments and build tools, Java tools in +general, and \f[CR]javac\f[R] and the Java launcher in particular, are +more stringent regarding the organization of compiled class files, and +will be organized in package hierarchies or module hierarchies, as +appropriate. +.PP +The location of these hierarchies are specified to \f[CR]javac\f[R] with +command\-line options, whose names typically end in \(dqpath\(dq, like +\f[B]\f[CB]\-\-source\-path\f[B]\f[R] or +\f[B]\f[CB]\-\-class\-path\f[B]\f[R]. +Also as a general rule, path options whose name includes the word +\f[CR]module\f[R], like \f[B]\f[CB]\-\-module\-path\f[B]\f[R], are used +to specify module hierarchies, although some module\-related path +options allow a package hierarchy to be specified on a per\-module +basis. +All other path options are used to specify package hierarchies. +.SS Package Hierarchy +In a package hierarchy, directories and subdirectories are used to +represent the component parts of the package name, with the source file +or compiled class file for a type being stored as a file with an +extension of \f[CR].java\f[R] or \f[CR].class\f[R] in the most nested +directory. +.PP +For example, in a package hierarchy, the source file for a class +\f[CR]com.example.MyClass\f[R] will be stored in the file +\f[I]com/example/MyClass.java\f[R] +.SS Module Hierarchy +In a module hierarchy, the first level of directories are named for the +modules in the hierarchy; within each of those directories the contents +of the module are organized in package hierarchies. +.PP +For example, in a module hierarchy, the compiled class file for a type +called \f[CR]com.example.MyClass\f[R] in a module called +\f[CR]my.library\f[R] will be stored in +\f[I]my.library/com/example/MyClass.class\f[R]. +.PP +The various output directories used by \f[CR]javac\f[R] (the class +output directory, the source output directory, and native header output +directory) will all be organized in a module hierarchy when multiple +modules are being compiled. +.SS Module Source Hierarchy +Although the source for each individual module should always be +organized in a package hierarchy, it may be convenient to group those +hierarchies into a module source hierarchy. +This is similar to a module hierarchy, except that there may be +intervening directories between the directory for the module and the +directory that is the root of the package hierarchy for the source code +of the module. +.PP +For example, in a module source hierarchy, the source file for a type +called \f[CR]com.example.MyClass\f[R] in a module called +\f[CR]my.library\f[R] may be stored in a file such as +\f[I]my.library/src/main/java/com/example/MyClass.java\f[R]. +.SH THE MODULE SOURCE PATH OPTION +The \f[B]\f[CB]\-\-module\-source\-path\f[B]\f[R] option has two forms: +a \f[I]module\-specific form\f[R], in which a package path is given for +each module containing code to be compiled, and a +\f[I]module\-pattern\f[R] form, in which the source path for each module +is specified by a pattern. +The module\-specific form is generally simpler to use when only a small +number of modules are involved; the module\-pattern form may be more +convenient when the number of modules is large and the modules are +organized in a regular manner that can be described by a pattern. +.PP +Multiple instances of the \f[CR]\-\-module\-source\-path\f[R] option may +be given, each one using either the module\-pattern form or the +module\-specific form, subject to the following limitations: +.IP \(bu 2 +the module\-pattern form may be used at most once +.IP \(bu 2 +the module\-specific form may be used at most once for any given module +.PP +If the module\-specific form is used for any module, the associated +search path overrides any path that might otherwise have been inferred +from the module\-pattern form. +.SS Module\-specific form +The module\-specific form allows an explicit search path to be given for +any specific module. +This form is: +.IP \(bu 2 +\f[CR]\-\-module\-source\-path\f[R] +\f[I]module\-name\f[R]\f[CR]=\f[R]\f[I]file\-path\f[R] +(\f[I]path\-separator\f[R] \f[I]file\-path\f[R])* +.PP +The path separator character is \f[CR];\f[R] on Windows, and +\f[CR]:\f[R] otherwise. +.PP +\f[B]Note:\f[R] this is similar to the form used for the +\f[B]\f[CB]\-\-patch\-module\f[B]\f[R] option. +.SS Module\-pattern form +The module\-pattern form allows a concise specification of the module +source path for any number of modules organized in regular manner. +.IP \(bu 2 +\f[CR]\-\-module\-source\-path\f[R] \f[I]pattern\f[R] +.PP +The pattern is defined by the following rules, which are applied in +order: +.IP \(bu 2 +The argument is considered to be a series of segments separated by the +path separator character (\f[CR];\f[R] on Windows, and \f[CR]:\f[R] +otherwise). +.IP \(bu 2 +Each segment containing curly braces of the form +.RS 2 +.IP +.EX +string1{alt1 ( ,alt2 )* } string2 +.EE +.PP +is considered to be replaced by a series of segments formed by +\(dqexpanding\(dq the braces: +.IP +.EX +string1 alt1 string2 +string1 alt2 string2 +and so on... +.EE +.PP +The braces may be nested. +.PP +This rule is applied for all such usages of braces. +.RE +.IP \(bu 2 +Each segment must have at most one asterisk (\f[CR]*\f[R]). +If a segment does not contain an asterisk, it is considered to be as +though the file separator character and an asterisk are appended. +.RS 2 +.PP +For any module \f[I]M\f[R], the source path for that module is formed +from the series of segments obtained by substituting the module name +\f[I]M\f[R] for the asterisk in each segment. +.PP +\f[B]Note\f[R]: in this context, the asterisk is just used as a special +marker, to denote the position in the path of the module name. +It should not be confused with the use of \f[CR]*\f[R] as a file name +wildcard character, as found on most operating systems. +.RE +.SH PATCHING MODULES +javac allows any content, whether in source or compiled form, to be +patched into any module using the \f[B]\f[CB]\-\-patch\-module\f[B]\f[R] +option. +You may want to do this to compile alternative implementations of a +class to be patched at runtime into a JVM, or to inject additional +classes into the module, such as when testing. +.PP +The form of the option is: +.IP \(bu 2 +\f[CR]\-\-patch\-module\f[R] +\f[I]module\-name\f[R]\f[CR]=\f[R]\f[I]file\-path\f[R] +(\f[I]path\-separator\f[R] \f[I]file\-path\f[R] )* +.PP +The path separator character is \f[CR];\f[R] on Windows, and +\f[CR]:\f[R] otherwise. +The paths given for the module must specify the root of a package +hierarchy for the contents of the module +.PP +The option may be given at most once for any given module. +Any content on the path will hide any like\-named content later in the +path and in the patched module. +.PP +When patching source code into more than one module, the +\f[B]\f[CB]\-\-module\-source\-path\f[B]\f[R] must also be used, so that +the output directory is organized in a module hierarchy, and capable of +holding the compiled class files for the modules being compiled. +.SH ANNOTATION PROCESSING +The \f[CR]javac\f[R] command provides direct support for annotation +processing. +.PP +The API for annotation processors is defined in the +\f[CR]javax.annotation.processing\f[R] and \f[CR]javax.lang.model\f[R] +packages and subpackages. +.SS How Annotation Processing Works +Annotation processing is requested by using an option to configure +annotation processing, such as \f[B]\f[CB]\-processor\f[B]\f[R], +\f[B]\f[CB]\-\-processor\-path\f[B]\f[R], +\f[B]\f[CB]\-\-processor\-module\-path\f[B]\f[R] or by explicitly +enabling processing with the \f[B]\f[CB]\-proc:full\f[B]\f[R] or +\f[B]\f[CB]\-proc:only\f[B]\f[R] options. +Annotation processing is disabled using the +\f[B]\f[CB]\-proc:none\f[B]\f[R] option. +.PP +If annotation processing is requested, the compiler searches for any +annotation processors that are available. +.PP +The search path can be specified with the +\f[B]\f[CB]\-processorpath\f[B]\f[R] option. +If no path is specified, then the user class path is used. +Processors are located by means of service provider\-configuration files +named +\f[CR]META\-INF/services/javax.annotation.processing.Processor\f[R] on +the search path. +Such files should contain the names of any annotationation processors to +be used, listed one per line. +Alternatively, processors can be specified explicitly, using the +\f[B]\f[CB]\-processor\f[B]\f[R] option. +.PP +After scanning the source files and classes on the command line to +determine what annotations are present, the compiler queries the +processors to determine what annotations they process. +When a match is found, the processor is called. +A processor can claim the annotations it processes, in which case no +further attempt is made to find any processors for those annotations. +After all of the annotations are claimed, the compiler does not search +for additional processors. +.PP +If any processors generate new source files, then another round of +annotation processing occurs: Any newly generated source files are +scanned, and the annotations processed as before. +Any processors called on previous rounds are also called on all +subsequent rounds. +This continues until no new source files are generated. +.PP +After a round occurs where no new source files are generated, the +annotation processors are called one last time, to give them a chance to +complete any remaining work. +Finally, unless the \f[B]\f[CB]\-proc:only\f[B]\f[R] option is used, the +compiler compiles the original and all generated source files. +.PP +If you use an annotation processor that generates additional source +files to be included in the compilation, you can specify a default +module to be used for the newly generated files, for use when a module +declaration is not also generated. +In this case, use the +\f[B]\f[CB]\-\-default\-module\-for\-created\-files\f[B]\f[R] option. +.SS Compilation Environment and Runtime Environment. +The declarations in source files and previously compiled class files are +analyzed by \f[CR]javac\f[R] in a \f[I]compilation environment\f[R] that +is distinct from the \f[I]runtime environment\f[R] used to execute +\f[CR]javac\f[R] itself. +Although there is a deliberate similarity between many \f[CR]javac\f[R] +options and like\-named options for the Java \f[B]launcher\f[R], such as +\f[CR]\-\-class\-path\f[R], \f[CR]\-\-module\-path\f[R] and so on, it is +important to understand that in general the \f[CR]javac\f[R] options +just affect the environment in which the source files are compiled, and +do not affect the operation of \f[CR]javac\f[R] itself. +.PP +The distinction between the compilation environment and runtime +environment is significant when it comes to using annotation processors. +Although annotations processors process elements (declarations) that +exist in the compilation environment, the annotation processor itself is +executed in the runtime environment. +If an annotation processor has dependencies on libraries that are not in +modules, the libraries can be placed, along with the annotation +processor itself, on the processor path. +(See the \f[B]\f[CB]\-\-processor\-path\f[B]\f[R] option.) +If the annotation processor and its dependencies are in modules, you +should use the processor module path instead. +(See the \f[B]\f[CB]\-\-processor\-module\-path\f[B]\f[R] option.) +When those are insufficient, it may be necessary to provide further +configuration of the runtime environment. +This can be done in two ways: +.IP "1." 3 +If \f[CR]javac\f[R] is invoked from the command line, options can be +passed to the underlying runtime by prefixing the option with +\f[B]\f[CB]\-J\f[B]\f[R]. +.IP "2." 3 +You can start an instance of a Java Virtual Machine directly and use +command line options and API to configure an environment in which +\f[CR]javac\f[R] can be invoked via one of its \f[B]APIs\f[R]. +.SH COMPILING FOR EARLIER RELEASES OF THE PLATFORM +\f[CR]javac\f[R] can compile code that is to be used on other releases +of the platform, using either the \f[B]\f[CB]\-\-release\f[B]\f[R] +option, or the \f[B]\f[CB]\-\-source\f[B]\f[R]/\f[CR]\-source\f[R] and +\f[B]\f[CB]\-\-target\f[B]\f[R]/\f[CR]\-target\f[R] options, together +with additional options to specify the platform classes. +.PP +Depending on the desired platform release, there are some restrictions +on some of the options that can be used. +.IP \(bu 2 +When compiling for JDK 8 and earlier releases, you cannot use any option +that is intended for use with the module system. +This includes all of the following options: +.RS 2 +.IP \(bu 2 +\f[B]\f[CB]\-\-module\-source\-path\f[B]\f[R], +\f[B]\f[CB]\-\-upgrade\-module\-path\f[B]\f[R], +\f[B]\f[CB]\-\-system\f[B]\f[R], \f[B]\f[CB]\-\-module\-path\f[B]\f[R], +\f[B]\f[CB]\-\-add\-modules\f[B]\f[R], +\f[B]\f[CB]\-\-add\-exports\f[B]\f[R], \f[CR]\-\-add\-opens\f[R], +\f[B]\f[CB]\-\-add\-reads\f[B]\f[R], +\f[B]\f[CB]\-\-limit\-modules\f[B]\f[R], +\f[B]\f[CB]\-\-patch\-module\f[B]\f[R] +.PP +If you use the \f[CR]\-\-source\f[R]/\f[CR]\-source\f[R] or +\f[CR]\-\-target\f[R]/\f[CR]\-target\f[R] options, you should also set +the appropriate platform classes using the boot class path family of +options. +.RE +.IP \(bu 2 +When compiling for JDK 9 and later releases, you cannot use any option +that is intended to configure the boot class path. +This includes all of the following options: +.RS 2 +.IP \(bu 2 +\f[B]\f[CB]\-Xbootclasspath/p:\f[B]\f[R], +\f[B]\f[CB]\-Xbootclasspath\f[B]\f[R], +\f[B]\f[CB]\-Xbootclasspath/a:\f[B]\f[R], +\f[B]\f[CB]\-endorseddirs\f[B]\f[R], +\f[B]\f[CB]\-Djava.endorsed.dirs\f[B]\f[R], +\f[B]\f[CB]\-extdirs\f[B]\f[R], \f[B]\f[CB]\-Djava.ext.dirs\f[B]\f[R], +\f[B]\f[CB]\-profile\f[B]\f[R] +.PP +If you use the \f[CR]\-\-source\f[R]/\f[CR]\-source\f[R] or +\f[CR]\-\-target\f[R]/\f[CR]\-target\f[R] options, you should also set +the appropriate platform classes using the \f[CR]\-\-system\f[R] option +to give the location of an appropriate installed release of JDK. +.RE +.PP +When using the \f[CR]\-\-release\f[R] option, only the supported +documented API for that release may be used; you cannot use any options +to break encapsulation to access any internal classes. +.SH APIS +The \f[CR]javac\f[R] compiler can be invoked using an API in three +different ways: +.TP +The \f[B]Java Compiler API\f[R] +This provides the most flexible way to invoke the compiler, including +the ability to compile source files provided in memory buffers or other +non\-standard file systems. +.TP +The \f[B]ToolProvider API\f[R] +A \f[CR]ToolProvider\f[R] for \f[CR]javac\f[R] can be obtained by +calling \f[CR]ToolProvider.findFirst(\(dqjavac\(dq)\f[R]. +This returns an object with the equivalent functionality of the +command\-line tool. +.RS +\f[B]Note\f[R]: This API should not be confused with the like\-named API +in the \f[B]\f[CB]javax.tools\f[B]\f[R] package. +.RE +.TP +The \f[CR]javac\f[R] \f[B]Legacy API\f[R] +This API is retained for backward compatibility only. +All new code should use either the Java Compiler API or the ToolProvider +API. +.PP +\f[B]Note:\f[R] All other classes and methods found in a package with +names that start with \f[CR]com.sun.tools.javac\f[R] (subpackages of +\f[CR]com.sun.tools.javac\f[R]) are strictly internal and subject to +change at any time. +.SH EXAMPLES OF USING \-XLINT KEYS +.TP +\f[CR]cast\f[R] +Warns about unnecessary and redundant casts, for example: +.RS +.RS +.PP +\f[CR]String s = (String) \(dqHello!\(dq\f[R] +.RE +.RE +.TP +\f[CR]classfile\f[R] +Warns about issues related to class file contents. +.TP +\f[CR]deprecation\f[R] +Warns about the use of deprecated items. +For example: +.RS +.IP +.EX +java.util.Date myDate = new java.util.Date(); +int currentDay = myDate.getDay(); +.EE +The method \f[CR]java.util.Date.getDay\f[R] has been deprecated since +JDK 1.1. +.RE +.TP +\f[CR]dep\-ann\f[R] +Warns about items that are documented with the \f[CR]\(atdeprecated\f[R] +Javadoc comment, but do not have the \f[CR]\(atDeprecated\f[R] +annotation, for example: +.RS +.IP +.EX +/** + * \(atdeprecated As of Java SE 7, replaced by {\(atlink #newMethod()} + */ +public static void deprecatedMethod() { } +public static void newMethod() { } +.EE +.RE +.TP +\f[CR]divzero\f[R] +Warns about division by the constant integer 0, for example: +.RS +.RS +.PP +\f[CR]int divideByZero = 42 / 0;\f[R] +.RE +.RE +.TP +\f[CR]empty\f[R] +Warns about empty statements after \f[CR]if\f[R]statements, for example: +.RS +.IP +.EX +class E { + void m() { + if (true) ; + } +} +.EE +.RE +.TP +\f[CR]fallthrough\f[R] +Checks the switch blocks for fall\-through cases and provides a warning +message for any that are found. +Fall\-through cases are cases in a switch block, other than the last +case in the block, whose code does not include a \f[CR]break\f[R] +statement, allowing code execution to fall through from that case to the +next case. +For example, the code following the case 1 label in this switch block +does not end with a \f[CR]break\f[R] statement: +.RS +.IP +.EX +switch (x) { +case 1: + System.out.println(\(dq1\(dq); + // No break statement here. +case 2: + System.out.println(\(dq2\(dq); +} +.EE +If the \f[CR]\-Xlint:fallthrough\f[R] option was used when compiling +this code, then the compiler emits a warning about possible +fall\-through into case, with the line number of the case in question. +.RE +.TP +\f[CR]finally\f[R] +Warns about \f[CR]finally\f[R] clauses that cannot be completed +normally, for example: +.RS +.IP +.EX +public static int m() { + try { + throw new NullPointerException(); + } catch (NullPointerException e) { + System.err.println(\(dqCaught NullPointerException.\(dq); + return 1; + } finally { + return 0; + } + } +.EE +The compiler generates a warning for the \f[CR]finally\f[R] block in +this example. +When the \f[CR]int\f[R] method is called, it returns a value of 0. +A \f[CR]finally\f[R] block executes when the \f[CR]try\f[R] block exits. +In this example, when control is transferred to the \f[CR]catch\f[R] +block, the \f[CR]int\f[R] method exits. +However, the \f[CR]finally\f[R] block must execute, so it\(aqs executed, +even though control was transferred outside the method. +.RE +.TP +\f[CR]options\f[R] +Warns about issues that related to the use of command\-line options. +See \f[B]Compiling for Earlier Releases of the Platform\f[R]. +.TP +\f[CR]overrides\f[R] +Warns about issues related to method overrides. +For example, consider the following two classes: +.RS +.IP +.EX +public class ClassWithVarargsMethod { + void varargsMethod(String... s) { } +} + +public class ClassWithOverridingMethod extends ClassWithVarargsMethod { + \(atOverride + void varargsMethod(String[] s) { } +} +.EE +The compiler generates a warning similar to the following:. +.IP +.EX +warning: [override] varargsMethod(String[]) in ClassWithOverridingMethod +overrides varargsMethod(String...) in ClassWithVarargsMethod; overriding +method is missing \(aq...\(aq +.EE +When the compiler encounters a \f[CR]varargs\f[R] method, it translates +the \f[CR]varargs\f[R] formal parameter into an array. +In the method \f[CR]ClassWithVarargsMethod.varargsMethod\f[R], the +compiler translates the \f[CR]varargs\f[R] formal parameter +\f[CR]String... s\f[R] to the formal parameter \f[CR]String[] s\f[R], an +array that matches the formal parameter of the method +\f[CR]ClassWithOverridingMethod.varargsMethod\f[R]. +Consequently, this example compiles. +.RE +.TP +\f[CR]path\f[R] +Warns about invalid path elements and nonexistent path directories on +the command line (with regard to the class path, the source path, and +other paths). +Such warnings cannot be suppressed with the +\f[CR]\(atSuppressWarnings\f[R] annotation. +For example: +.RS +.IP \(bu 2 +\f[B]Linux and macOS:\f[R] +\f[CR]javac \-Xlint:path \-classpath /nonexistentpath Example.java\f[R] +.IP \(bu 2 +\f[B]Windows:\f[R] +\f[CR]javac \-Xlint:path \-classpath C:\(rsnonexistentpath Example.java\f[R] +.RE +.TP +\f[CR]processing\f[R] +Warns about issues related to annotation processing. +The compiler generates this warning when you have a class that has an +annotation, and you use an annotation processor that cannot handle that +type of annotation. +For example, the following is a simple annotation processor: +.RS +\f[B]Source file AnnoProc.java\f[R]: +.IP +.EX +import java.util.*; +import javax.annotation.processing.*; +import javax.lang.model.*; +import javax.lang.model.element.*; + +\(atSupportedAnnotationTypes(\(dqNotAnno\(dq) +public class AnnoProc extends AbstractProcessor { + public boolean process(Set elems, RoundEnvironment renv){ + return true; + } + + public SourceVersion getSupportedSourceVersion() { + return SourceVersion.latest(); + } +} +.EE +\f[B]Source file AnnosWithoutProcessors.java\f[R]: +.IP +.EX +\(atinterface Anno { } + +\(atAnno +class AnnosWithoutProcessors { } +.EE +The following commands compile the annotation processor +\f[CR]AnnoProc\f[R], then run this annotation processor against the +source file \f[CR]AnnosWithoutProcessors.java\f[R]: +.IP +.EX +javac AnnoProc.java +javac \-cp . \-Xlint:processing \-processor AnnoProc \-proc:only AnnosWithoutProcessors.java +.EE +When the compiler runs the annotation processor against the source file +\f[CR]AnnosWithoutProcessors.java\f[R], it generates the following +warning: +.IP +.EX +warning: [processing] No processor claimed any of these annotations: Anno +.EE +To resolve this issue, you can rename the annotation defined and used in +the class \f[CR]AnnosWithoutProcessors\f[R] from \f[CR]Anno\f[R] to +\f[CR]NotAnno\f[R]. +.RE +.TP +\f[CR]rawtypes\f[R] +Warns about unchecked operations on raw types. +The following statement generates a \f[CR]rawtypes\f[R] warning: +.RS +.RS +.PP +\f[CR]void countElements(List l) { ... }\f[R] +.RE +The following example does not generate a \f[CR]rawtypes\f[R] warning: +.RS +.PP +\f[CR]void countElements(List l) { ... }\f[R] +.RE +\f[CR]List\f[R] is a raw type. +However, \f[CR]List\f[R] is an unbounded wildcard parameterized type. +Because \f[CR]List\f[R] is a parameterized interface, always specify its +type argument. +In this example, the \f[CR]List\f[R] formal argument is specified with +an unbounded wildcard (\f[CR]?\f[R]) as its formal type parameter, which +means that the \f[CR]countElements\f[R] method can accept any +instantiation of the \f[CR]List\f[R] interface. +.RE +.TP +\f[CR]serial\f[R] +Warns about missing \f[CR]serialVersionUID\f[R] definitions on +serializable classes. +For example: +.RS +.IP +.EX +public class PersistentTime implements Serializable +{ + private Date time; + + public PersistentTime() { + time = Calendar.getInstance().getTime(); + } + + public Date getTime() { + return time; + } +} +.EE +The compiler generates the following warning: +.IP +.EX +warning: [serial] serializable class PersistentTime has no definition of +serialVersionUID +.EE +If a serializable class does not explicitly declare a field named +\f[CR]serialVersionUID\f[R], then the serialization runtime environment +calculates a default \f[CR]serialVersionUID\f[R] value for that class +based on various aspects of the class, as described in the Java Object +Serialization Specification. +However, it\(aqs strongly recommended that all serializable classes +explicitly declare \f[CR]serialVersionUID\f[R] values because the +default process of computing \f[CR]serialVersionUID\f[R] values is +highly sensitive to class details that can vary depending on compiler +implementations. +As a result, this might cause an unexpected +\f[CR]InvalidClassExceptions\f[R] during deserialization. +To guarantee a consistent \f[CR]serialVersionUID\f[R] value across +different Java compiler implementations, a serializable class must +declare an explicit \f[CR]serialVersionUID\f[R] value. +.RE +.TP +\f[CR]static\f[R] +Warns about issues relating to the use of static variables, for example: +.RS +.IP +.EX +class XLintStatic { + static void m1() { } + void m2() { this.m1(); } +} +.EE +The compiler generates the following warning: +.IP +.EX +warning: [static] static method should be qualified by type name, +XLintStatic, instead of by an expression +.EE +To resolve this issue, you can call the \f[CR]static\f[R] method +\f[CR]m1\f[R] as follows: +.RS +.PP +\f[CR]XLintStatic.m1();\f[R] +.RE +Alternately, you can remove the \f[CR]static\f[R] keyword from the +declaration of the method \f[CR]m1\f[R]. +.RE +.TP +\f[CR]this\-escape\f[R] +Warns about constructors leaking \f[CR]this\f[R] prior to subclass +initialization. +For example, this class: +.RS +.IP +.EX +public class MyClass { + public MyClass() { + System.out.println(this.hashCode()); + } +} +.EE +generates the following warning: +.IP +.EX +MyClass.java:3: warning: [this\-escape] possible \(aqthis\(aq escape + before subclass is fully initialized + System.out.println(this.hashCode()); + \(ha +.EE +A \(aqthis\(aq escape warning is generated when a constructor does +something that might result in a subclass method being invoked before +the constructor returns. +In such cases the subclass method would be operating on an incompletely +initialized instance. +In the above example, a subclass of \f[CR]MyClass\f[R] that overrides +\f[CR]hashCode()\f[R] to incorporate its own fields would likely produce +an incorrect result when invoked as shown. +Warnings are only generated if a subclass could exist that is outside of +the current module (or package, if no module) being compiled. +So, for example, constructors in final and non\-public classes do not +generate warnings. +.RE +.TP +\f[CR]try\f[R] +Warns about issues relating to the use of \f[CR]try\f[R] blocks, +including try\-with\-resources statements. +For example, a warning is generated for the following statement because +the resource \f[CR]ac\f[R] declared in the \f[CR]try\f[R] block is not +used: +.RS +.IP +.EX +try ( AutoCloseable ac = getResource() ) { // do nothing} +.EE +.RE +.TP +\f[CR]unchecked\f[R] +Gives more detail for unchecked conversion warnings that are mandated by +the Java Language Specification, for example: +.RS +.IP +.EX +List l = new ArrayList(); +List ls = l; // unchecked warning +.EE +During type erasure, the types \f[CR]ArrayList\f[R] and +\f[CR]List\f[R] become \f[CR]ArrayList\f[R] and \f[CR]List\f[R], +respectively. +The \f[CR]ls\f[R] command has the parameterized type +\f[CR]List\f[R]. +When the \f[CR]List\f[R] referenced by \f[CR]l\f[R] is assigned to +\f[CR]ls\f[R], the compiler generates an unchecked warning. +At compile time, the compiler and JVM cannot determine whether +\f[CR]l\f[R] refers to a \f[CR]List\f[R] type. +In this case, \f[CR]l\f[R] does not refer to a \f[CR]List\f[R] +type. +As a result, heap pollution occurs. +A heap pollution situation occurs when the \f[CR]List\f[R] object +\f[CR]l\f[R], whose static type is \f[CR]List\f[R], is assigned +to another \f[CR]List\f[R] object, \f[CR]ls\f[R], that has a different +static type, \f[CR]List\f[R]. +However, the compiler still allows this assignment. +It must allow this assignment to preserve backward compatibility with +releases of Java SE that do not support generics. +Because of type erasure, \f[CR]List\f[R] and +\f[CR]List\f[R] both become \f[CR]List\f[R]. +Consequently, the compiler allows the assignment of the object +\f[CR]l\f[R], which has a raw type of \f[CR]List\f[R], to the object +\f[CR]ls\f[R]. +.RE +.TP +\f[CR]varargs\f[R] +Warns about unsafe use of variable arguments (\f[CR]varargs\f[R]) +methods, in particular, those that contain non\-reifiable arguments, for +example: +.RS +.IP +.EX +public class ArrayBuilder { + public static void addToList (List listArg, T... elements) { + for (T x : elements) { + listArg.add(x); + } + } +} +.EE +A non\-reifiable type is a type whose type information is not fully +available at runtime. +The compiler generates the following warning for the definition of the +method \f[CR]ArrayBuilder.addToList\f[R]: +.IP +.EX +warning: [varargs] Possible heap pollution from parameterized vararg type T +.EE +When the compiler encounters a varargs method, it translates the +\f[CR]varargs\f[R] formal parameter into an array. +However, the Java programming language does not permit the creation of +arrays of parameterized types. +In the method \f[CR]ArrayBuilder.addToList\f[R], the compiler translates +the \f[CR]varargs\f[R] formal parameter \f[CR]T...\f[R] elements to the +formal parameter \f[CR]T[]\f[R] elements, an array. +However, because of type erasure, the compiler converts the +\f[CR]varargs\f[R] formal parameter to \f[CR]Object[]\f[R] elements. +Consequently, there\(aqs a possibility of heap pollution. +.RE diff --git a/man/javadoc.1 b/man/javadoc.1 new file mode 100644 index 000000000..fa13e4c18 --- /dev/null +++ b/man/javadoc.1 @@ -0,0 +1,1426 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JAVADOC" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +javadoc \- generate HTML pages of API documentation from Java source +files +.SH SYNOPSIS +\f[CR]javadoc\f[R] [\f[I]options\f[R]] [\f[I]packagenames\f[R]] +[\f[I]sourcefiles\f[R]] [\f[CR]\(at\f[R]\f[I]files\f[R]] +.TP +\f[I]options\f[R] +Specifies command\-line options, separated by spaces. +See \f[B]Standard \f[CB]javadoc\f[B] Options\f[R], \f[B]Extra +\f[CB]javadoc\f[B] Options\f[R], \f[B]Standard Options for the Standard +Doclet\f[R], and \f[B]Extra Options for the Standard Doclet\f[R]. +.TP +\f[I]packagenames\f[R] +Specifies names of packages that you want to document, separated by +spaces, for example \f[CR]java.lang java.lang.reflect java.awt\f[R]. +If you want to also document the subpackages, then use the +\f[CR]\-subpackages\f[R] option to specify the packages. +.RS +By default, \f[CR]javadoc\f[R] looks for the specified packages in the +current directory and subdirectories. +Use the \f[CR]\-sourcepath\f[R] option to specify the list of +directories where to look for packages. +.RE +.TP +\f[I]sourcefiles\f[R] +Specifies names of Java source files that you want to document, +separated by spaces, for example +\f[CR]Class.java Object.java Button.java\f[R]. +By default, \f[CR]javadoc\f[R] looks for the specified classes in the +current directory. +However, you can specify the full path to the class file and use +wildcard characters, for example +\f[CR]/home/src/java/awt/Graphics*.java\f[R]. +You can also specify the path relative to the current directory. +.TP +\f[CR]\(at\f[R]\f[I]files\f[R] +Specifies names of files that contain a list of \f[CR]javadoc\f[R] tool +options, package names, and source file names in any order. +.SH DESCRIPTION +The \f[CR]javadoc\f[R] tool parses the declarations and documentation +comments in a set of Java source files and processes them using a +pluggable back\-end called a \f[B]\f[BI]doclet\f[B]\f[R]. +.PP +The \f[B]\f[BI]standard doclet\f[B]\f[R] is the one that is used by +default, and can produce corresponding HTML pages that describe the +public and protected classes, nested and implicitly declared classes +(but not anonymous inner classes), interfaces, constructors, methods, +and fields. +The standard doclet interprets the content of documentation comments +according to the \f[B]JavaDoc Documentation Comment Specification for +the Standard Doclet\f[R]. +Custom tags in documentation comments are supported by means of +\f[B]taglets\f[R]. +.PP +You can use the \f[CR]javadoc\f[R] tool and the standard doclet to +generate the API documentation or the implementation documentation for a +set of source files. +.PP +You can run the \f[CR]javadoc\f[R] tool on entire packages, individual +source files, or both. +When documenting entire packages, you can use the +\f[CR]\-subpackages\f[R] option either to recursively traverse a +directory and its subdirectories, or to pass in an explicit list of +package names. +When you document individual source files, pass in a list of Java source +file names. +.SS Documentation Comments +The \f[CR]javadoc\f[R] tool uses the documentation comment, if any, that +immediately precedes the beginning of the declaration, whether that is +an annotation, modifier, or the name being declared. +If there are multiple documentation comments before the declaration, +only the last one (closest to the declaration) will be used. +If there are any documentation comments after the beginning of the +declaration, they will be ignored. +To check for any extra or misplaced documentation comments, compile your +source code with the \f[CR]javac\f[R] option \f[CR]\-Xlint\f[R], or more +specifically, \f[CR]\-Xlint:dangling\-doc\-comments\f[R]. +Within a source file, you may suppress any warnings generated by these +options by using +\f[CR]\(atSuppressWarnings(\(dqdangling\-doc\-comments\(dq)\f[R] on a +suitable enclosing declaration. +.SS Conformance +The standard doclet does not validate the content of documentation +comments for conformance, nor does it attempt to correct any errors in +documentation comments. +Anyone running javadoc is advised to be aware of the problems that may +arise when generating non\-conformant output or output containing +executable content, such as JavaScript. +The standard doclet does provide the \f[B]DocLint\f[R] feature to help +developers detect common problems in documentation comments; but it is +also recommended to check the generated output with any appropriate +conformance and other checking tools. +.PP +For more details on the conformance requirements for HTML5 documents, +see \f[B]Conformance requirements for authors\f[R] +[https://html.spec.whatwg.org/multipage/introduction.html#conformance\-requirements\-for\-authors] +in the HTML5 Specification. +For more details on security issues related to web pages, see the +\f[B]Open Web Application Security Project (OWASP)\f[R] +[https://www.owasp.org] page. +.SH OPTIONS +\f[CR]javadoc\f[R] supports command\-line options for both the main +\f[CR]javadoc\f[R] tool and the currently selected doclet. +The standard doclet is used if no other doclet is specified. +.PP +GNU\-style options (that is, those beginning with \f[CR]\-\-\f[R]) can +use an equal sign (\f[CR]=\f[R]) instead of whitespace characters to +separate the name of an option from its value. +.SS Standard \f[CR]javadoc\f[R] Options +The following core \f[CR]javadoc\f[R] options are equivalent to +corresponding \f[CR]javac\f[R] options. +See \f[I]Standard Options\f[R] in \f[B]javac\f[R] for the detailed +descriptions of using these options: +.IP \(bu 2 +\f[CR]\-\-add\-modules\f[R] +.IP \(bu 2 +\f[CR]\-bootclasspath\f[R] +.IP \(bu 2 +\f[CR]\-\-class\-path\f[R], \f[CR]\-classpath\f[R], or \f[CR]\-cp\f[R] +.IP \(bu 2 +\f[CR]\-\-disable\-line\-doc\-comments\f[R] +.IP \(bu 2 +\f[CR]\-\-enable\-preview\f[R] +.IP \(bu 2 +\f[CR]\-encoding\f[R] +.IP \(bu 2 +\f[CR]\-extdirs\f[R] +.IP \(bu 2 +\f[CR]\-\-limit\-modules\f[R] +.IP \(bu 2 +\f[CR]\-\-module\f[R] +.IP \(bu 2 +\f[CR]\-\-module\-path\f[R] or \f[CR]\-p\f[R] +.IP \(bu 2 +\f[CR]\-\-module\-source\-path\f[R] +.IP \(bu 2 +\f[CR]\-\-release\f[R] +.IP \(bu 2 +\f[CR]\-\-source\f[R] or \f[CR]\-source\f[R] +.IP \(bu 2 +\f[CR]\-\-source\-path\f[R] or \f[CR]\-sourcepath\f[R] +.IP \(bu 2 +\f[CR]\-\-system\f[R] +.IP \(bu 2 +\f[CR]\-\-upgrade\-module\-path\f[R] +.PP +The following options are the core \f[CR]javadoc\f[R] options that are +not equivalent to a corresponding \f[CR]javac\f[R] option: +.TP +\f[CR]\-breakiterator\f[R] +Computes the first sentence of the description in a documentation +comment using an instance of \f[CR]java.text.BreakIterator\f[R] to +detect \f[I]sentence breaks\f[R]. +The rules that are used depend on the \f[B]current locale\f[R]: for +example, for English, a sentence break occurs after a period, question +mark, or exclamation point followed by a space when the next word starts +with a capital letter. +(This is meant to handle most abbreviations, such as \(dqThe serial no. +is valid\(dq, but will not handle \(dqMr. +Smith\(dq.) +.RS +The option is enabled by default if the language of the current locale +is not English. +If the language of the current locale is English, and the +\f[CR]\-breakiterator\f[R] option is not given, a simple default +algorithm is used, which just looks for a period followed by a space. +In a traditional \f[CR]/**...*/\f[R] comment, the search for the end of +the first sentence is terminated by an HTML block tag, such as +\f[CR]

\f[R], \f[CR]

\f[R], or the tag for a heading.
+In a Markdown \f[CR]///\f[R] comment, the search for the end of the
+first sentence skips over any characters enclosed in code spans and
+links, and is terminated by the end of the initial block, as indicated
+by a blank line or the beginning of the next block, such as a list,
+thematic break, or an HTML block.
+The first sentence of the description in a documentation comment is used
+in summary tables, index pages, and other situations where a short
+summary is required.
+For more explicit control in any individual documentation comment,
+enclose the contents of the first sentence in a
+\f[CR]{\(atsummary ...}\f[R] tag, or when applicable, in a
+\f[CR]{\(atreturn ...}\f[R] tag.
+.RE
+.TP
+\f[CR]\-doclet\f[R] \f[I]class\f[R]
+Generates output by using an alternate doclet.
+Use the fully qualified name.
+This doclet defines the content and formats the output.
+If the \f[CR]\-doclet\f[R] option isn\(aqt used, then the
+\f[CR]javadoc\f[R] tool uses the standard doclet for generating the
+default HTML format.
+This class must implement the \f[CR]jdk.javadoc.doclet.Doclet\f[R]
+interface.
+The path to this class is defined by the \f[CR]\-docletpath\f[R] option.
+.TP
+\f[CR]\-docletpath\f[R] \f[I]path\f[R]
+Specifies where to find doclet class files (specified with the
+\f[CR]\-doclet\f[R] option) and any JAR files it depends on.
+If the starting class file is in a JAR file, then this option specifies
+the path to that JAR file.
+You can specify an absolute path or a path relative to the current
+directory.
+If \f[CR]path\f[R] contains multiple paths or JAR files, then they
+should be separated with a colon (\f[CR]:\f[R]) on Linux and macOS, and
+a semicolon (\f[CR];\f[R]) on Windows.
+This option isn\(aqt necessary when the \f[CR]doclet\f[R] starting class
+is already in the search path.
+.TP
+\f[CR]\-exclude\f[R] \f[I]pkglist\f[R]
+Unconditionally, excludes the specified packages and their subpackages
+from the list formed by \f[CR]\-subpackages\f[R].
+It excludes those packages even when they would otherwise be included by
+some earlier or later \f[CR]\-subpackages\f[R] option.
+.RS
+The following example would include \f[CR]java.io\f[R],
+\f[CR]java.util\f[R], and \f[CR]java.math\f[R] (among others), but would
+exclude packages rooted at \f[CR]java.net\f[R] and \f[CR]java.lang\f[R].
+Notice that these examples exclude \f[CR]java.lang.ref\f[R], which is a
+subpackage of \f[CR]java.lang\f[R].
+Arguments are separated by colons on all operating systems.
+.IP \(bu 2
+\f[B]Linux and macOS:\f[R]
+.RS 2
+.IP
+.EX
+javadoc \-sourcepath /home/user/src \-subpackages java \-exclude java.net:java.lang
+.EE
+.RE
+.IP \(bu 2
+\f[B]Windows:\f[R]
+.RS 2
+.IP
+.EX
+javadoc \-sourcepath \(rsuser\(rssrc \-subpackages java \-exclude java.net:java.lang
+.EE
+.RE
+.RE
+.TP
+\f[CR]\-\-expand\-requires\f[R] (\f[CR]transitive\f[R]|\f[CR]all\f[R])
+Instructs the javadoc tool to expand the set of modules to be
+documented.
+By default, only the modules given explicitly on the command line are
+documented.
+Supports the following values:
+.RS
+.IP \(bu 2
+\f[CR]transitive\f[R]: additionally includes all the required transitive
+dependencies of those modules.
+.IP \(bu 2
+\f[CR]all\f[R]: includes all dependencies.
+.RE
+.TP
+\f[CR]\-\-help\f[R], \f[CR]\-help\f[R], \f[CR]\-h\f[R], or \f[CR]\-?\f[R]
+Prints a synopsis of the standard options.
+.TP
+\f[CR]\-\-help\-extra\f[R] or \f[CR]\-X\f[R]
+Prints a synopsis of the set of extra options.
+.TP
+\f[CR]\-J\f[R]\f[I]flag\f[R]
+Passes \f[I]flag\f[R] directly to the Java Runtime Environment (JRE)
+that runs the \f[CR]javadoc\f[R] tool.
+For example, if you must ensure that the system sets aside 32 MB of
+memory in which to process the generated documentation, then you would
+call the \f[CR]\-Xmx\f[R] option as follows:
+\f[CR]javadoc \-J\-Xmx32m \-J\-Xms32m com.mypackage\f[R].
+Be aware that \f[CR]\-Xms\f[R] is optional because it only sets the size
+of initial memory, which is useful when you know the minimum amount of
+memory required.
+.RS
+There is no space between the \f[CR]J\f[R] and the \f[CR]flag\f[R].
+Use the \f[CR]\-version\f[R] option to report the version of the JRE
+being used to run the \f[CR]javadoc\f[R] tool.
+.IP
+.EX
+javadoc \-J\-version
+java version \(dq17\(dq 2021\-09\-14 LTS
+Java(TM) SE Runtime Environment (build 17+35\-LTS\-2724)
+Java HotSpot(TM) 64\-Bit Server VM (build 17+35\-LTS\-2724, mixed mode, sharing)
+.EE
+.RE
+.TP
+\f[CR]\-locale\f[R] \f[I]name\f[R]
+Specifies the locale that the \f[CR]javadoc\f[R] tool uses when it
+generates documentation.
+The argument is the name of the locale, as described in
+\f[CR]java.util.Locale\f[R] documentation, such as \f[CR]en_US\f[R]
+(English, United States) or \f[CR]en_US_WIN\f[R] (Windows variant).
+.RS
+Specifying a locale causes the \f[CR]javadoc\f[R] tool to choose the
+resource files of that locale for messages such as strings in the
+navigation bar, headings for lists and tables, help file contents,
+comments in the \f[CR]stylesheet.css\f[R] file, and so on.
+It also specifies the sorting order for lists sorted alphabetically, and
+the sentence separator to determine the end of the first sentence.
+The \f[CR]\-locale\f[R] option doesn\(aqt determine the locale of the
+documentation comment text specified in the source files of the
+documented classes.
+.RE
+.TP
+\f[CR]\-package\f[R]
+Shows only package, protected, and public classes and members.
+.TP
+\f[CR]\-private\f[R]
+Shows all classes and members.
+.TP
+\f[CR]\-protected\f[R]
+Shows only protected and public classes and members.
+This is the default.
+.TP
+\f[CR]\-public\f[R]
+Shows only the public classes and members.
+.TP
+\f[CR]\-quiet\f[R]
+Shuts off messages so that only the warnings and errors appear to make
+them easier to view.
+It also suppresses the \f[CR]version\f[R] string.
+.TP
+\f[CR]\-\-show\-members\f[R] \f[I]value\f[R]
+Specifies which members (fields, methods, or constructors) are
+documented, where \f[I]value\f[R] can be any of the following:
+.RS
+.IP \(bu 2
+\f[CR]public\f[R] \-\-\- shows only public members
+.IP \(bu 2
+\f[CR]protected\f[R] \-\-\- shows public and protected members; this is
+the default
+.IP \(bu 2
+\f[CR]package\f[R] \-\-\- shows public, protected, and package members
+.IP \(bu 2
+\f[CR]private\f[R] \-\-\- shows all members
+.RE
+.TP
+\f[CR]\-\-show\-module\-contents\f[R] \f[I]value\f[R]
+Specifies the documentation granularity of module declarations, where
+\f[I]value\f[R] can be \f[CR]api\f[R] or \f[CR]all\f[R].
+.TP
+\f[CR]\-\-show\-packages\f[R] \f[I]value\f[R]
+Specifies which module packages are documented, where \f[I]value\f[R]
+can be \f[CR]exported\f[R] or \f[CR]all\f[R] packages.
+.TP
+\f[CR]\-\-show\-types\f[R] \f[I]value\f[R]
+Specifies which types (classes, interfaces, etc.)
+are documented, where \f[I]value\f[R] can be any of the following:
+.RS
+.IP \(bu 2
+\f[CR]public\f[R] \-\-\- shows only public types
+.IP \(bu 2
+\f[CR]protected\f[R] \-\-\- shows public and protected types; this is
+the default
+.IP \(bu 2
+\f[CR]package\f[R] \-\-\- shows public, protected, and package types
+.IP \(bu 2
+\f[CR]private\f[R] \-\-\- shows all types
+.RE
+.TP
+\f[CR]\-subpackages\f[R] \f[I]subpkglist\f[R]
+Generates documentation from source files in the specified packages and
+recursively in their subpackages.
+This option is useful when adding new subpackages to the source code
+because they are automatically included.
+Each package argument is any top\-level subpackage (such as
+\f[CR]java\f[R]) or fully qualified package (such as
+\f[CR]javax.swing\f[R]) that doesn\(aqt need to contain source files.
+Arguments are separated by colons on all operating systems.
+Wild cards aren\(aqt allowed.
+Use \f[CR]\-sourcepath\f[R] to specify where to find the packages.
+This option doesn\(aqt process source files that are in the source tree
+but don\(aqt belong to the packages.
+.RS
+For example, the following commands generates documentation for packages
+named \f[CR]java\f[R] and \f[CR]javax.swing\f[R] and all of their
+subpackages.
+.IP \(bu 2
+\f[B]Linux and macOS:\f[R]
+.RS 2
+.IP
+.EX
+javadoc \-d docs \-sourcepath /home/user/src \-subpackages java:javax.swing
+.EE
+.RE
+.IP \(bu 2
+\f[B]Windows:\f[R]
+.RS 2
+.IP
+.EX
+javadoc \-d docs \-sourcepath \(rsuser\(rssrc \-subpackages java:javax.swing
+.EE
+.RE
+.RE
+.TP
+\f[CR]\-verbose\f[R]
+Provides more detailed messages while the \f[CR]javadoc\f[R] tool runs.
+Without the \f[CR]\-verbose\f[R] option, messages appear for loading the
+source files, generating the documentation (one message per source
+file), and sorting.
+The \f[CR]\-verbose\f[R] option causes the printing of additional
+messages that specify the number of milliseconds to parse each Java
+source file.
+.TP
+\f[CR]\-\-version\f[R]
+Prints version information.
+.TP
+\f[CR]\-Werror\f[R]
+Reports an error if any warnings occur.
+.PP
+Note that if a Java source file contains an implicitly declared class,
+then that class and its public, protected, and package members will be
+documented regardless of the options such as \f[CR]\-\-show\-types\f[R],
+\f[CR]\-\-show\-members\f[R], \f[CR]\-private\f[R],
+\f[CR]\-protected\f[R], \f[CR]\-package\f[R], and \f[CR]\-public\f[R].
+If \f[CR]\-\-show\-members\f[R] is specified with value
+\f[CR]private\f[R] or if \f[CR]\-private\f[R] is used then all private
+members of an implicitly declared class will be documented too.
+.SS Extra \f[CR]javadoc\f[R] Options
+\f[I]Note:\f[R] The additional options for \f[CR]javadoc\f[R] are
+subject to change without notice.
+.PP
+The following additional \f[CR]javadoc\f[R] options are equivalent to
+corresponding \f[CR]javac\f[R] options.
+See \f[I]Extra Options\f[R] in \f[B]javac\f[R] for the detailed
+descriptions of using these options:
+.IP \(bu 2
+\f[CR]\-\-add\-exports\f[R]
+.IP \(bu 2
+\f[CR]\-\-add\-reads\f[R]
+.IP \(bu 2
+\f[CR]\-\-patch\-module\f[R]
+.IP \(bu 2
+\f[CR]\-Xmaxerrs\f[R]
+.IP \(bu 2
+\f[CR]\-Xmaxwarns\f[R]
+.SS Standard Options for the Standard Doclet
+The following options are provided by the standard doclet.
+.TP
+\f[CR]\-\-add\-script\f[R] \f[I]file\f[R]
+Adds \f[I]file\f[R] as an additional JavaScript file to the generated
+documentation.
+This option can be used one or more times to specify additional script
+files.
+.RS
+Command\-line example:
+.RS
+.PP
+\f[CR]javadoc \-\-add\-script first_script.js \-\-add\-script second_script.js pkg_foo\f[R]
+.RE
+.RE
+.TP
+\f[CR]\-\-add\-stylesheet\f[R] \f[I]file\f[R]
+Adds \f[I]file\f[R] as an additional stylesheet file to the generated
+documentation.
+This option can be used one or more times to specify additional
+stylesheets included in the documentation.
+.RS
+Command\-line example:
+.IP
+.EX
+javadoc \-\-add\-stylesheet new_stylesheet_1.css \-\-add\-stylesheet new_stylesheet_2.css pkg_foo
+.EE
+.RE
+.TP
+\f[CR]\-\-allow\-script\-in\-comments\f[R]
+Allow JavaScript in documentation comments, and options whose value is
+\f[I]html\-code\f[R].
+.TP
+\f[CR]\-author\f[R]
+Includes the text of any \f[CR]author\f[R] tags in the generated
+documentation.
+.TP
+\f[CR]\-bottom\f[R] \f[I]html\-code\f[R]
+Specifies the text to be placed at the bottom of each generated page.
+The text can contain HTML tags and white space, but when it does, the
+text must be enclosed in quotation marks.
+Use escape characters for any internal quotation marks within text.
+.TP
+\f[CR]\-charset\f[R] \f[I]name\f[R]
+Specifies the HTML character set for this document.
+The name should be a preferred MIME name as specified in the \f[B]IANA
+Registry, Character Sets\f[R]
+[http://www.iana.org/assignments/character\-sets].
+.RS
+For example:
+.IP
+.EX
+javadoc \-charset \(dqiso\-8859\-1\(dq mypackage
+.EE
+This command inserts the following line, containing a
+\f[B]\f[CB]meta\f[B] element\f[R]
+[https://html.spec.whatwg.org/multipage/semantics.html#the\-meta\-element]
+in the head of every generated page:
+.IP
+.EX
+
+.EE
+.RE
+.TP
+\f[CR]\-d\f[R] \f[I]directory\f[R]
+Specifies the destination directory where the \f[CR]javadoc\f[R] tool
+saves the generated HTML files.
+If you omit the \f[CR]\-d\f[R] option, then the files are saved to the
+current directory.
+The \f[CR]directory\f[R] value can be absolute or relative to the
+current working directory.
+The destination directory is automatically created when the
+\f[CR]javadoc\f[R] tool runs.
+.RS
+.IP \(bu 2
+\f[B]Linux and macOS:\f[R] For example, the following command generates
+the documentation for the package \f[CR]com.mypackage\f[R] and saves the
+results in the \f[CR]/user/doc/\f[R] directory:
+.RS 2
+.IP
+.EX
+javadoc \-d /user/doc/ com.mypackage
+.EE
+.RE
+.IP \(bu 2
+\f[B]Windows:\f[R] For example, the following command generates the
+documentation for the package \f[CR]com.mypackage\f[R] and saves the
+results in the \f[CR]\(rsuser\(rsdoc\(rs\f[R] directory:
+.RS 2
+.IP
+.EX
+javadoc \-d \(rsuser\(rsdoc\(rs com.mypackage
+.EE
+.RE
+.RE
+.TP
+\f[CR]\-docencoding\f[R] \f[I]name\f[R]
+Specifies the encoding of the generated HTML files.
+The name should be a preferred MIME name as specified in the \f[B]IANA
+Registry, Character Sets\f[R]
+[http://www.iana.org/assignments/character\-sets].
+.RS
+Three options are available for use in a \f[CR]javadoc\f[R] encoding
+command.
+The \f[CR]\-encoding\f[R] option is used for encoding the files read by
+the \f[CR]javadoc\f[R] tool, while the \f[CR]\-docencoding\f[R] and
+\f[CR]\-charset\f[R] options are used for encoding the files written by
+the tool.
+Of the three available options, at most, only the input and an output
+encoding option are used in a single encoding command.
+If you specify both input and output encoding options in a command, they
+must be the same value.
+If you specify neither output option, it defaults to the input encoding.
+For example:
+.IP
+.EX
+javadoc \-docencoding \(dqiso\-8859\-1\(dq mypackage
+.EE
+.RE
+.TP
+\f[CR]\-docfilessubdirs\f[R]
+Enables deep copying of \f[CR]doc\-files\f[R] directories.
+Subdirectories and all contents are recursively copied to the
+destination.
+For example, the directory \f[CR]doc\-files/example/images\f[R] and all
+of its contents are copied.
+Use the \f[B]\f[CB]\-excludedocfilessubdir\f[B]\f[R] option to restrict
+the subdirectories to be copied.
+.TP
+\f[CR]\-doctitle\f[R] \f[I]html\-code\f[R]
+Specifies the title to place near the top of the overview summary file.
+The text specified in the \f[CR]title\f[R] tag is placed as a centered,
+level\-one heading directly beneath the navigation bar.
+The \f[CR]title\f[R] tag can contain HTML tags and white space, but when
+it does, you must enclose the title in quotation marks.
+Additional quotation marks within the \f[CR]title\f[R] tag must be
+escaped.
+For example,
+\f[CR]javadoc \-doctitle \(dqMy Library
v1.0\(dq com.mypackage\f[R]. +.TP +\f[CR]\-excludedocfilessubdir\f[R] \f[I]name1\f[R]\f[CR],\f[R]\f[I]name2...\f[R] +Excludes any subdirectories with the given names when recursively +copying \f[CR]doc\-files\f[R] subdirectories. +See \f[B]\f[CB]\-docfilessubdirs\f[B]\f[R]. +For historical reasons, \f[CR]:\f[R] can be used anywhere in the +argument as a separator instead of \f[CR],\f[R]. +.TP +\f[CR]\-footer\f[R] \f[I]html\-code\f[R] +This option is no longer supported and reports a warning. +.TP +\f[CR]\-group\f[R] \f[I]name\f[R] \f[I]g1\f[R]\f[CR],\f[R]\f[I]g2...\f[R] +Group the specified packages, or modules when documenting modular code, +together in the Overview page. +For historical reasons, \f[CR]:\f[R] can be used as a separator anywhere +in the argument instead of \f[CR],\f[R]. +.TP +\f[CR]\-header\f[R] \f[I]html\-code\f[R] +Specifies the header text to be placed at the top of each output file. +The header is placed to the right of the navigation bar. +The \f[CR]header\f[R] can contain HTML tags and white space, but when it +does, the \f[CR]header\f[R] must be enclosed in quotation marks. +Use escape characters for internal quotation marks within a header. +For example, +\f[CR]javadoc \-header \(dqMy Library
v1.0\(dq com.mypackage\f[R]. +.TP +\f[CR]\-helpfile\f[R] \f[I]filename\f[R] +Specifies a file containing the text that will be displayed when the +\f[B]HELP\f[R] link in the navigation bar is clicked. +If this option is not given, the \f[CR]javadoc\f[R] tool creates a +default page that will be used. +.TP +\f[CR]\-html5\f[R] +This option is a no\-op and is just retained for backwards +compatibility. +.TP +\f[CR]\-\-javafx\f[R] or \f[CR]\-javafx\f[R] +Enables JavaFX functionality. +This option is enabled by default if the JavaFX library classes are +detected on the module path. +.TP +\f[CR]\-keywords\f[R] +Adds HTML keyword \f[CR]\f[R] tags to the generated file for each +class. +These tags can help search engines that look for \f[CR]\f[R] tags +find the pages. +Most search engines that search the entire Internet don\(aqt look at +\f[CR]\f[R] tags, because pages can misuse them. +Search engines offered by companies that confine their searches to their +own website can benefit by looking at \f[CR]\f[R] tags. +The \f[CR]\f[R] tags include the fully qualified name of the class +and the unqualified names of the fields and methods. +Constructors aren\(aqt included because they are identical to the class +name. +For example, the page for the class \f[CR]String\f[R] includes these +keywords: +.RS +.IP +.EX + + + + +.EE +.RE +.TP +\f[CR]\-link\f[R] \f[I]url\f[R] +Creates links to existing \f[CR]javadoc\f[R] generated documentation of +externally referenced classes. +The \f[I]url\f[R] argument is the absolute or relative URL of the +directory that contains the external \f[CR]javadoc\f[R] generated +documentation. +You can specify multiple \f[CR]\-link\f[R] options in a specified +\f[CR]javadoc\f[R] tool run to link to multiple documents. +.RS +Either a \f[CR]package\-list\f[R] or an \f[CR]element\-list\f[R] file +must be in this \f[I]url\f[R] directory (otherwise, use the +\f[CR]\-linkoffline\f[R] option). +\f[I]Note:\f[R] The \f[CR]package\-list\f[R] and +\f[CR]element\-list\f[R] files are generated by the \f[CR]javadoc\f[R] +tool when generating the API documentation and should not be modified by +the user. +When you use the \f[CR]javadoc\f[R] tool to document packages, it uses +the \f[CR]package\-list\f[R] file to determine the packages declared in +an API. +When you generate API documents for modules, the \f[CR]javadoc\f[R] tool +uses the \f[CR]element\-list\f[R] file to determine the modules and +packages declared in an API. +The \f[CR]javadoc\f[R] tool reads the names from the appropriate list +file and then links to the packages or modules at that URL. +When the \f[CR]javadoc\f[R] tool runs, the \f[I]url\f[R] value is copied +into the \f[CR]\f[R] links that are created. +Therefore, \f[I]url\f[R] must be the URL to the directory and not to a +file. +You can use an absolute link for \f[I]url\f[R] to enable your documents +to link to a document on any web site, or you can use a relative link to +link only to a relative location. +If you use a relative link, then the value you pass in should be the +relative path from the destination directory (specified with the +\f[CR]\-d\f[R] option) to the directory containing the packages being +linked to. +When you specify an absolute link, you usually use an HTTP link. +However, if you want to link to a file system that has no web server, +then you can use a file link. +Use a file link only when everyone who wants to access the generated +documentation shares the same file system. +In all cases, and on all operating systems, use a slash as the +separator, whether the URL is absolute or relative, and +\f[CR]https:\f[R], \f[CR]http:\f[R], or \f[CR]file:\f[R] as specified in +the \f[B]RFC 1738: Uniform Resource Locators (URL)\f[R] +[https://www.rfc\-editor.org/info/rfc1738]. +.IP +.EX +\-link https://///.../ +\-link http://///.../ +\-link file://///.../ +\-link //.../ +.EE +.RE +.TP +\f[CR]\-\-link\-modularity\-mismatch\f[R] (\f[CR]warn\f[R]|\f[CR]info\f[R]) +Specifies whether external documentation with wrong modularity (e.g. +non\-modular documentation for a modular library, or the reverse case) +should be reported as a warning (\f[CR]warn\f[R]) or just a message +(\f[CR]info\f[R]). +The default behavior is to report a warning. +.TP +\f[CR]\-linkoffline\f[R] \f[I]url1\f[R] \f[I]url2\f[R] +This option is a variation of the \f[CR]\-link\f[R] option. +They both create links to \f[CR]javadoc\f[R] generated documentation for +externally referenced classes. +You can specify multiple \f[CR]\-linkoffline\f[R] options in a specified +\f[CR]javadoc\f[R] tool run. +.RS +Use the \f[CR]\-linkoffline\f[R] option when: +.IP \(bu 2 +Linking to a document on the web that the \f[CR]javadoc\f[R] tool +can\(aqt access through a web connection +.IP \(bu 2 +The \f[CR]package\-list\f[R] or \f[CR]element\-list\f[R] file of the +external document either isn\(aqt accessible or doesn\(aqt exist at the +URL location, but does exist at a different location and can be +specified by either the \f[CR]package\-list\f[R] or +\f[CR]element\-list\f[R] file (typically local). +\f[I]Note:\f[R] The \f[CR]package\-list\f[R] and +\f[CR]element\-list\f[R] files are generated by the \f[CR]javadoc\f[R] +tool when generating the API documentation and should not be modified by +the user. +If \f[I]url1\f[R] is accessible only on the World Wide Web, then the +\f[CR]\-linkoffline\f[R] option removes the constraint that the +\f[CR]javadoc\f[R] tool must have a web connection to generate +documentation. +Another use of the \f[CR]\-linkoffline\f[R] option is as a work\-around +to update documents. +After you have run the \f[CR]javadoc\f[R] tool on a full set of packages +or modules, you can run the \f[CR]javadoc\f[R] tool again on a smaller +set of changed packages or modules, so that the updated files can be +inserted back into the original set. +For example, the \f[CR]\-linkoffline\f[R] option takes two arguments. +The first is for the string to be embedded in the \f[CR]\f[R] +links, and the second tells the \f[CR]javadoc\f[R] tool where to find +either the \f[CR]package\-list\f[R] or \f[CR]element\-list\f[R] file. +The \f[I]url1\f[R] or \f[I]url2\f[R] value is the absolute or relative +URL of the directory that contains the external \f[CR]javadoc\f[R] +generated documentation that you want to link to. +When relative, the value should be the relative path from the +destination directory (specified with the \f[CR]\-d\f[R] option) to the +root of the packages being linked to. +See \f[I]url\f[R] in the \f[CR]\-link\f[R] option. +.RE +.TP +\f[CR]\-\-link\-platform\-properties\f[R] \f[I]url\f[R] +Specifies a properties file used to configure links to platform +documentation. +.RS +The \f[I]url\f[R] argument is expected to point to a properties file +containing one or more entries with the following format, where +\f[CR]\f[R] is the platform version as passed to the +\f[CR]\-\-release\f[R] or \f[CR]\-\-source\f[R] option and +\f[CR]\f[R] is the base URL of the corresponding platform API +documentation: +.IP +.EX +doclet.platform.docs.= +.EE +For instance, a properties file containing URLs for releases 15 to 17 +might contain the following lines: +.IP +.EX +doclet.platform.docs.15=https://example.com/api/15/ +doclet.platform.docs.16=https://example.com/api/16/ +doclet.platform.docs.17=https://example.com/api/17/ +.EE +If the properties file does not contain an entry for a particular +release no platform links are generated. +.RE +.TP +\f[CR]\-linksource\f[R] +Creates an HTML version of each source file (with line numbers) and adds +links to them from the standard HTML documentation. +Links are created for classes, interfaces, constructors, methods, and +fields whose declarations are in a source file. +Otherwise, links aren\(aqt created, such as for default constructors and +generated classes. +.RS +This option exposes all private implementation details in the included +source files, including private classes, private fields, and the bodies +of private methods, regardless of the \f[CR]\-public\f[R], +\f[CR]\-package\f[R], \f[CR]\-protected\f[R], and \f[CR]\-private\f[R] +options. +Unless you also use the \f[CR]\-private\f[R] option, not all private +classes or interfaces are accessible through links. +Each link appears on the name of the identifier in its declaration. +For example, the link to the source code of the \f[CR]Button\f[R] class +would be on the word \f[CR]Button\f[R]: +.IP +.EX +public class Button extends Component implements Accessible +.EE +The link to the source code of the \f[CR]getLabel\f[R] method in the +\f[CR]Button\f[R] class is on the word \f[CR]getLabel\f[R]: +.IP +.EX +public String getLabel() +.EE +.RE +.TP +\f[CR]\-\-main\-stylesheet\f[R] \f[I]file\f[R] or \f[CR]\-stylesheetfile\f[R] \f[I]file\f[R] +Specifies the path of an alternate stylesheet file that contains the +definitions for the CSS styles used in the generated documentation. +This option lets you override the default. +If you do not specify the option, the \f[CR]javadoc\f[R] tool will +create and use a default stylesheet. +The file name can be any name and isn\(aqt restricted to +\f[CR]stylesheet.css\f[R]. +The \f[CR]\-\-main\-stylesheet\f[R] option is the preferred form. +.RS +Command\-line example: +.IP +.EX +javadoc \-\-main\-stylesheet main_stylesheet.css pkg_foo +.EE +.RE +.TP +\f[CR]\-nocomment\f[R] +Suppresses the entire comment body, including the main description and +all tags, and generate only declarations. +This option lets you reuse source files that were originally intended +for a different purpose so that you can produce skeleton HTML +documentation during the early stages of a new project. +.TP +\f[CR]\-nodeprecated\f[R] +Prevents the generation of any deprecated API in the documentation. +This does what the \f[CR]\-nodeprecatedlist\f[R] option does, and it +doesn\(aqt generate any deprecated API throughout the rest of the +documentation. +This is useful when writing code when you don\(aqt want to be distracted +by the deprecated code. +.TP +\f[CR]\-nodeprecatedlist\f[R] +Prevents the generation of the file that contains the list of deprecated +APIs (\f[CR]deprecated\-list.html\f[R]) and the link in the navigation +bar to that page. +The \f[CR]javadoc\f[R] tool continues to generate the deprecated API +throughout the rest of the document. +This is useful when your source code contains no deprecated APIs, and +you want to make the navigation bar cleaner. +.TP +\f[CR]\-\-no\-fonts\f[R] +Prevents inclusion of font files in the generated documentation. +This can be useful if the documentation uses a custom stylesheet which +does not use the default fonts. +.TP +\f[CR]\-nohelp\f[R] +Omits the \f[B]HELP\f[R] link in the navigation bar at the top of each +generated page. +.TP +\f[CR]\-noindex\f[R] +Omits the index from the generated documents. +The index is produced by default. +.TP +\f[CR]\-nonavbar\f[R] +Prevents the generation of the navigation bar and header. +The \f[CR]\-nonavbar\f[R] option has no effect on the +\f[CR]\-bottom\f[R] option. +The \f[CR]\-nonavbar\f[R] option is useful when you are interested only +in the content and have no need for navigation, such as when you are +converting the files to PostScript or PDF for printing only. +.TP +\f[CR]\-\-no\-platform\-links\f[R] +Prevents the generation of links to platform documentation. +These links are generated by default. +.TP +\f[CR]\-noqualifier\f[R] \f[I]name1\f[R]\f[CR],\f[R]\f[I]name2...\f[R] +Excludes the list of qualifiers from the output. +The package name is removed from places where class or interface names +appear. +For historical reasons, \f[CR]:\f[R] can be used anywhere in the +argument as a separator instead of \f[CR],\f[R]. +.RS +The following example omits all package qualifiers: +\f[CR]\-noqualifier all\f[R]. +The following example omits \f[CR]java.lang\f[R] and \f[CR]java.io\f[R] +package qualifiers: \f[CR]\-noqualifier java.lang:java.io\f[R]. +The following example omits package qualifiers starting with +\f[CR]java\f[R] and \f[CR]com.sun\f[R] subpackages, but not +\f[CR]javax: \-noqualifier java.*:com.sun.*\f[R]. +Where a package qualifier would appear due to the previous behavior, the +name can be suitably shortened. +This rule is in effect whether or not the \f[CR]\-noqualifier\f[R] +option is used. +.RE +.TP +\f[CR]\-nosince\f[R] +Omits from the generated documentation the \f[CR]Since\f[R] sections +derived from any \f[CR]since\f[R] tags. +.TP +\f[CR]\-notimestamp\f[R] +Suppresses the time stamp, which is hidden in an HTML comment in the +generated HTML near the top of each page. +The \f[CR]\-notimestamp\f[R] option is useful when you want to run the +\f[CR]javadoc\f[R] tool on two source bases and compare them, because it +prevents time stamps from causing a difference (which would otherwise be +a difference on every page). +The time stamp includes the \f[CR]javadoc\f[R] tool release number. +.TP +\f[CR]\-notree\f[R] +Omits the class and interface hierarchy pages from the generated +documents. +These are the pages you reach using the \f[B]TREE\f[R] link in the +navigation bar. +The hierarchy is produced by default. +.TP +\f[CR]\-\-override\-methods\f[R] (\f[CR]detail\f[R]|\f[CR]summary\f[R]) +Documents overridden methods in the detail or summary sections. +The default is \f[CR]detail\f[R]. +.TP +\f[CR]\-overview\f[R] \f[I]filename\f[R] +Specifies that the \f[CR]javadoc\f[R] tool should retrieve the content +for the overview documentation from the file specified by +\f[I]filename\f[R] and place it on the Overview page +(\f[CR]overview\-summary.html\f[R]). +If the \f[I]filename\f[R] is a relative path, it is evaluated relative +to the current working directory. +.RS +The file may be an HTML file, with a filename ending in +\f[CR].html\f[R], or a Markdown file, with a filename ending in +\f[CR].md\f[R]. +If the file is an HTML file, the content for the overview documentation +is taken from the \f[CR]
\f[R] element in the file, if one is +present, or from the \f[CR]\f[R] element is there is no +\f[CR]
\f[R] element. +If the file is a Markdown file, the entire content of the file is used. +The title on the overview page is set by \f[CR]\-doctitle\f[R]. +\f[I]Note:\f[R] older versions of the \f[CR]javadoc\f[R] tool assumed +that any use of this option was for an HTML file, and allowed any +extension for the \f[I]filename\f[R]. +.RE +.TP +\f[CR]\-serialwarn\f[R] +Reports compile\-time warnings for missing \f[CR]\(atserial\f[R] tags. +By default, Javadoc reports no serial warnings. +Use this option to display the serial warnings, which helps to properly +document default serializable fields and \f[CR]writeExternal\f[R] +methods. +.TP +\f[CR]\-\-since\f[R] \f[I]release\f[R](\f[CR],\f[R]\f[I]release\f[R])* +Generates documentation for APIs that were added or newly deprecated in +the specified \f[I]release\f[R]s. +.RS +If the \f[CR]\(atsince\f[R] tag in the \f[CR]javadoc\f[R] comment of an +element in the documented source code matches a \f[I]release\f[R] passed +as the option argument, information about the element and the release it +was added in is included in a \(dqNew API\(dq page. +If the \(dqDeprecated API\(dq page is generated and the \f[CR]since\f[R] +element of the \f[CR]java.lang.Deprecated\f[R] annotation of a +documented element matches a \f[I]release\f[R] in the option arguments, +information about the release the element was deprecated in is added to +the \(dqDeprecated API\(dq page. +Releases are compared using case\-sensitive string comparison. +.RE +.TP +\f[CR]\-\-since\-label\f[R] \f[I]text\f[R] +Specifies the \f[I]text\f[R] to use in the heading of the \(dqNew +API\(dq page. +This may contain information about the releases covered in the page, +e.g. +\(dqNew API in release 2.0\(dq, or \(dqNew API since release 1\(dq. +.TP +\f[CR]\-\-snippet\-path\f[R] \f[I]snippetpathlist\f[R] +Specifies the search paths for finding files for external snippets. +The \f[I]snippetpathlist\f[R] can contain multiple paths by separating +them with the platform path separator (\f[CR];\f[R] on Windows; +\f[CR]:\f[R] on other platforms.) +The standard doclet first searches the \f[CR]snippet\-files\f[R] +subdirectory in the package containing the snippet, and then searches +all the directories in the given list. +.TP +\f[CR]\-sourcetab\f[R] \f[I]tab\-length\f[R] +Specifies the number of spaces each tab uses in the source. +.TP +\f[CR]\-\-spec\-base\-url\f[R] \f[I]url\f[R] +Specifies the base URL for relative URLs in \f[CR]\(atspec\f[R] tags, to +be used when generating links to any external specifications. +It can either be an absolute URL, or a relative URL, in which case it is +evaluated relative to the base directory of the generated output files. +The default value is equivalent to \f[CR]{\(atdocRoot}/../specs\f[R]. +.TP +\f[CR]\-splitindex\f[R] +Splits the index file into multiple files, alphabetically, one file per +letter, plus a file for any index entries that start with +non\-alphabetical symbols. +.TP +\f[CR]\-\-syntax\-highlight\f[R] +Enables syntax highlighting for code fragments in +\f[CR]{\(atsnippet}\f[R] tags and \f[CR]
\f[R] elements.
+For snippets, the \f[CR]lang\f[R] attribute is used to determine the
+language of code fragments, which defaults to \(dqjava\(dq for inline
+snippets and is derived from the file extension for external snippets.
+In HTML \f[CR]
\f[R] tags, the \f[CR]class\f[R] attribute can
+be used to specify the language of the contained code fragment as shown
+below:
+.RS
+.IP
+.EX
+
...
+.EE +If neither of these attributes is available automatic language detection +is applied. +To disable syntax highlighting for a code fragment set the language to +\(dqtext\(dq using one of the mechanisms described above. +The languages and formats supported by this option are Java, Properties, +JSON, HTML and XML. +.RE +.TP +\f[CR]\-tag\f[R] \f[I]name\f[R]:\f[I]locations\f[R]:\f[I]header\f[R] +Specifies a custom tag with a single argument. +For the \f[CR]javadoc\f[R] tool to spell\-check tag names, it is +important to include a \f[CR]\-tag\f[R] option for every custom tag that +is present in the source code, disabling (with \f[CR]X\f[R]) those that +aren\(aqt being output in the current run. +The colon (\f[CR]:\f[R]) is always the separator. +To include a colon in the tag name, escape it with a backward slash +(\f[CR]\(rs\f[R]). +The \f[CR]\-tag\f[R] option outputs the tag heading, \f[I]header\f[R], +in bold, followed on the next line by the text from its single argument. +Similar to any block tag, the argument text can contain inline tags, +which are also interpreted. +The output is similar to standard one\-argument tags, such as the +\f[CR]\(atreturn\f[R] and \f[CR]\(atauthor\f[R] tags. +Omitting a \f[I]header\f[R] value causes the \f[I]name\f[R] to be the +heading. +\f[I]locations\f[R] is a list of characters specifying the kinds of +declarations in which the tag may be used. +The following characters may be used, in either uppercase or lowercase: +.RS +.IP \(bu 2 +\f[CR]A\f[R]: all declarations +.IP \(bu 2 +\f[CR]C\f[R]: constructors +.IP \(bu 2 +\f[CR]F\f[R]: fields +.IP \(bu 2 +\f[CR]M\f[R]: methods +.IP \(bu 2 +\f[CR]O\f[R]: the overview page and other documentation files in +\f[CR]doc\-files\f[R] subdirectories +.IP \(bu 2 +\f[CR]P\f[R]: packages +.IP \(bu 2 +\f[CR]S\f[R]: modules +.IP \(bu 2 +\f[CR]T\f[R]: types (classes and interfaces) +.IP \(bu 2 +\f[CR]X\f[R]: nowhere: the tag is disabled, and will be ignored +The order in which tags are given on the command line will be used as +the order in which the tags appear in the generated output. +You can include standard tags in the order given on the command line by +using the \f[CR]\-tag\f[R] option with no \f[I]locations\f[R] or +\f[I]header\f[R]. +.RE +.TP +\f[CR]\-taglet\f[R] \f[I]class\f[R] +Specifies the fully qualified name of the taglet used in generating the +documentation for that tag. +Use the fully qualified name for the \f[I]class\f[R] value. +This taglet also defines the number of text arguments that the custom +tag has. +The taglet accepts those arguments, processes them, and generates the +output. +.RS +Taglets are useful for block or inline tags. +They can have any number of arguments and implement custom behavior, +such as making text bold, formatting bullets, writing out the text to a +file, or starting other processes. +Taglets can only determine where a tag should appear and in what form. +All other decisions are made by the doclet. +A taglet can\(aqt do things such as remove a class name from the list of +included classes. +However, it can execute side effects, such as printing the tag\(aqs text +to a file or triggering another process. +Use the \f[CR]\-tagletpath\f[R] option to specify the path to the +taglet. +The following example inserts the To Do taglet after Parameters and +ahead of Throws in the generated pages. +.IP +.EX +\-taglet com.sun.tools.doclets.ToDoTaglet +\-tagletpath /home/taglets +\-tag return +\-tag param +\-tag todo +\-tag throws +\-tag see +.EE +Alternately, you can use the \f[CR]\-taglet\f[R] option in place of its +\f[CR]\-tag\f[R] option, but that might be difficult to read. +.RE +.TP +\f[CR]\-tagletpath\f[R] \f[I]tagletpathlist\f[R] +Specifies the search paths for finding taglet class files. +The \f[I]tagletpathlist\f[R] can contain multiple paths by separating +them with the platform path separator (\f[CR];\f[R] on Windows; +\f[CR]:\f[R] on other platforms.) +The \f[CR]javadoc\f[R] tool searches all subdirectories of the specified +paths. +.TP +\f[CR]\-top\f[R] \f[I]html\-code\f[R] +Specifies the text to be placed at the top of each output file. +.TP +\f[CR]\-use\f[R] +Creates class and package usage pages. +Includes one Use page for each documented class and package. +The page describes what packages, classes, methods, constructors, and +fields use any API of the specified class or package. +Given class C, things that use class C would include subclasses of C, +fields declared as C, methods that return C, and methods and +constructors with parameters of type C. For example, you can look at the +Use page for the \f[CR]String\f[R] type. +Because the \f[CR]getName\f[R] method in the \f[CR]java.awt.Font\f[R] +class returns type \f[CR]String\f[R], the \f[CR]getName\f[R] method uses +\f[CR]String\f[R] and so the \f[CR]getName\f[R] method appears on the +Use page for \f[CR]String\f[R]. +This documents only uses of the API, not the implementation. +When a method uses \f[CR]String\f[R] in its implementation, but +doesn\(aqt take a string as an argument or return a string, that +isn\(aqt considered a use of \f[CR]String\f[R]. +To access the generated Use page, go to the class or package and click +the \f[B]USE\f[R] link in the navigation bar. +.TP +\f[CR]\-version\f[R] +Includes the text of any \f[CR]version\f[R] tags in the generated +documentation. +This text is omitted by default. +Note: To find out what version of the \f[CR]javadoc\f[R] tool you are +using, use the \f[CR]\-\-version\f[R] option (with two hyphens). +.TP +\f[CR]\-windowtitle\f[R] \f[I]title\f[R] +Specifies the title to be placed in the HTML \f[CR]\f[R] tag. +The text specified in the \f[CR]title\f[R] tag appears in the window +title and in any browser bookmarks (favorite places) that someone +creates for this page. +This title should not contain any HTML tags because a browser will not +interpret them correctly. +Use escape characters on any internal quotation marks within the +\f[CR]title\f[R] tag. +If the \f[CR]\-windowtitle\f[R] option is omitted, then the +\f[CR]javadoc\f[R] tool uses the value of the \f[CR]\-doctitle\f[R] +option for the \f[CR]\-windowtitle\f[R] option. +For example, +\f[CR]javadoc \-windowtitle \(dqMy Library\(dq com.mypackage\f[R]. +.SS Extra Options for the Standard Doclet +The following are additional options provided by the standard doclet and +are subject to change without notice. +Additional options are less commonly used or are otherwise regarded as +advanced. +.TP +\f[CR]\-\-date\f[R] \f[I]date\-and\-time\f[R] +Specifies the value to be used to timestamp the generated pages, in +\f[B]ISO 8601\f[R] +[https://www.iso.org/iso\-8601\-date\-and\-time\-format.html] format. +The specified value must be within 10 years of the current date and +time. +It is an error to specify both \f[CR]\-notimestamp\f[R] and +\f[CR]\-\-date\f[R]. +Using a specific value means the generated documentation can be part of +a \f[B]reproducible build\f[R] [https://reproducible\-builds.org/]. +If the option is not given, the default value is the current date and +time. +For example: +.RS +.IP +.EX +javadoc \-\-date 2022\-02\-01T17:41:59\-08:00 mypackage +.EE +.RE +.TP +\f[CR]\-\-legal\-notices\f[R] (\f[CR]default\f[R]|\f[CR]none\f[R]|\f[I]directory\f[R]) +Specifies the location from which to copy legal files to the generated +documentation. +If the option is not specified or is used with the value +\f[CR]default\f[R], the files are copied from the default location. +If the argument is used with value \f[CR]none\f[R], no files are copied. +Every other argument is interpreted as directory from which to copy the +legal files. +.TP +\f[CR]\-\-no\-frames\f[R] +This option is no longer supported and reports a warning. +.TP +\f[CR]\-Xdoclint\f[R] +Enables recommended checks for problems in documentation comments. +.RS +By default, the \f[CR]\-Xdoclint\f[R] option is enabled. +Disable it with the option \f[CR]\-Xdoclint:none\f[R]. +For more details, see \f[B]DocLint\f[R]. +.RE +.TP +\f[CR]\-Xdoclint:\f[R]\f[I]flag\f[R],\f[I]flag\f[R],... +Enables or disables specific checks for different kinds of issues in +documentation comments. +.RS +Each \f[I]flag\f[R] can be one of \f[CR]all\f[R], \f[CR]none\f[R], or +\f[CR][\-]\f[R]\f[I]group\f[R] where \f[I]group\f[R] has one of the +following values: \f[CR]accessibility\f[R], \f[CR]html\f[R], +\f[CR]missing\f[R], \f[CR]reference\f[R], \f[CR]syntax\f[R]. +For more details on these values, see \f[B]DocLint Groups\f[R]. +When specifying two or more flags, you can either use a single +\f[CR]\-Xdoclint:...\f[R] option, listing all the desired flags, or you +can use multiple options giving one or more flag in each option. +For example, use either of the following commands to check for the HTML, +syntax, and accessibility issues in the file \f[CR]MyFile.java\f[R]. +.IP +.EX +javadoc \-Xdoclint:html \-Xdoclint:syntax \-Xdoclint:accessibility MyFile.java +javadoc \-Xdoclint:html,syntax,accessibility MyFile.java +.EE +The following examples illustrate how to change what DocLint reports: +.IP \(bu 2 +\f[CR]\-Xdoclint:none\f[R] \-\-\- disables all checks +.IP \(bu 2 +\f[CR]\-Xdoclint:\f[R]\f[I]group\f[R] \-\-\- enables \f[I]group\f[R] +checks +.IP \(bu 2 +\f[CR]\-Xdoclint:all\f[R] \-\-\- enables all groups of checks +.IP \(bu 2 +\f[CR]\-Xdoclint:all,\-\f[R]\f[I]group\f[R] \-\-\- enables all checks +except \f[I]group\f[R] checks +For more details, see \f[B]DocLint\f[R]. +.RE +.TP +\f[CR]\-Xdoclint/package:\f[R][\f[CR]\-\f[R]]\f[I]packages\f[R] +Enables or disables checks in specific packages. +\f[I]packages\f[R] is a comma separated list of package specifiers. +A package specifier is either a qualified name of a package or a package +name prefix followed by \f[CR]*\f[R], which expands to all subpackages +of the given package. +Prefix the package specifier with \f[CR]\-\f[R] to disable checks for +the specified packages. +.RS +For more details, see \f[B]DocLint\f[R]. +.RE +.TP +\f[CR]\-Xdocrootparent\f[R] \f[I]url\f[R] +Replaces all \f[CR]\(atdocRoot\f[R] items followed by \f[CR]/..\f[R] in +documentation comments with \f[I]url\f[R]. +.SH DOCLINT +DocLint provides the ability to check for possible problems in +documentation comments. +Problems may be reported as warnings or errors, depending on their +severity. +For example, a missing comment may be bad style that deserves a warning, +but a link to an unknown Java declaration is more serious and deserves +an error. +Problems are organized into \f[B]groups\f[R], and options can be used to +enable or disable messages in one or more groups. +Within the source code, messages in one or more groups can be +\f[B]suppressed\f[R] by using \f[CR]\(atSuppressWarnings\f[R] +annotations. +.PP +When invoked from \f[CR]javadoc\f[R], by default DocLint checks all +comments that are used in the generated documentation. +It thus relies on other command\-line options to determine which +declarations, and which corresponding documentation comments will be +included. +\f[I]Note:\f[R] this may mean that even comments on some private members +of serializable classes will also be checked, if the members need to be +documented in the generated \f[CR]Serialized Forms\f[R] page. +.PP +In contrast, when DocLint is invoked from \f[CR]javac\f[R], DocLint +solely relies on the various \f[CR]\-Xdoclint...\f[R] options to +determine which documentation comments to check. +.PP +DocLint doesn\(aqt attempt to fix invalid input, it just reports it. +.PP +\f[I]Note:\f[R] DocLint doesn\(aqt guarantee the completeness of these +checks. +In particular, it isn\(aqt a full HTML compliance checker. +The goal is to just report common errors in a convenient manner. +.SS Groups +The checks performed by DocLint are organized into groups. +The warnings and errors in each group can be enabled or disabled with +command\-line options, or suppressed with +\f[CR]\(atSuppressWarnings\f[R] annotations. +.PP +The groups are as follows: +.IP \(bu 2 +\f[CR]accessibility\f[R] \-\-\- Checks for issues related to +accessibility. +For example, no \f[CR]alt\f[R] attribute specified in an +\f[CR]<img>\f[R] element, or no caption or summary attributes specified +in a \f[CR]<table>\f[R] element. +.RS 2 +.PP +Issues are reported as errors if a downstream validation tool might be +expected to report an error in the files generated by +\f[CR]javadoc\f[R]. +.PP +For reference, see the \f[B]Web Content Accessibility Guidelines\f[R] +[https://www.w3.org/WAI/standards\-guidelines/wcag/]. +.RE +.IP \(bu 2 +\f[CR]html\f[R] \-\-\- Detects common high\-level HTML issues. +For example, putting block elements inside inline elements, or not +closing elements that require an end tag. +.RS 2 +.PP +Issues are reported as errors if a downstream validation tool might be +expected to report an error in the files generated by +\f[CR]javadoc\f[R]. +.PP +For reference, see the \f[B]HTML Living Standard\f[R] +[https://html.spec.whatwg.org/multipage/]. +.RE +.IP \(bu 2 +\f[CR]missing\f[R] \-\-\- Checks for missing documentation comments or +tags. +For example, a missing comment on a class declaration, or a missing +\f[CR]\(atparam\f[R] or \f[CR]\(atreturn\f[R] tag in the comment for a +method declaration. +.RS 2 +.PP +Issues related to missing items are typically reported as warnings +because they are unlikely to be reported as errors by downstream +validation tools that may be used to check the output generated by +\f[CR]javadoc\f[R]. +.RE +.IP \(bu 2 +\f[CR]reference\f[R] \-\-\- Checks for issues relating to the references +to Java API elements from documentation comment tags. +For example, the reference in \f[CR]\(atsee\f[R] or +\f[CR]{\(atlink ...}\f[R] cannot be found, or a bad name is given for +\f[CR]\(atparam\f[R] or \f[CR]\(atthrows\f[R]. +.RS 2 +.PP +Issues are typically reported as errors because while the issue may not +cause problems in the generated files, the author has likely made a +mistake that will lead to incorrect or unexpected documentation. +.RE +.IP \(bu 2 +\f[CR]syntax\f[R] \-\-\- Checks for low\-level syntactic issues in +documentation comments. +For example, unescaped angle brackets (\f[CR]<\f[R] and \f[CR]>\f[R]) +and ampersands (\f[CR]&\f[R]) and invalid documentation comment tags. +.RS 2 +.PP +Issues are typically reported as errors because the issues may lead to +incorrect or unexpected documentation. +.RE +.SS Suppressing Messages +DocLint checks for and recognizes two strings that may be present in the +arguments for an \f[CR]\(atSuppressWarnings\f[R] annotation. +.IP \(bu 2 +\f[CR]doclint\f[R] +.IP \(bu 2 +\f[CR]doclint:\f[R]\f[I]LIST\f[R] +.PP +where \f[I]LIST\f[R] is a comma\-separated list of one or more of +\f[CR]accessibility\f[R], \f[CR]html\f[R], \f[CR]missing\f[R], +\f[CR]reference\f[R], \f[CR]syntax\f[R]. +.PP +The names in \f[I]LIST\f[R] are the same \f[B]group\f[R] names supported +by the command\-line \f[CR]\-Xdoclint\f[R] option for \f[CR]javac\f[R] +and \f[CR]javadoc\f[R]. +(This is the same convention honored by the \f[CR]javac\f[R] +\f[CR]\-Xlint\f[R] option and the corresponding names supported by +\f[CR]\(atSuppressWarnings\f[R].) +.PP +The names in \f[I]LIST\f[R] can equivalently be specified in separate +arguments of the annotation. +For example, the following are equivalent: +.IP \(bu 2 +\f[CR]\(atSuppressWarnings(\(dqdoclint:accessibility,missing\(dq)\f[R] +.IP \(bu 2 +\f[CR]\(atSuppressWarnings(\(dqdoclint:accessibility\(dq, \(dqdoclint:missing\(dq)\f[R] +.PP +When DocLint detects an issue in a documentation comment, it checks for +the presence of \f[CR]\(atSuppressWarnings\f[R] on the associated +declaration and on all lexically enclosing declarations. +The issue will be ignored if any such annotation is found containing the +simple string \f[CR]doclint\f[R] or the longer form +\f[CR]doclint:LIST\f[R] where \f[I]LIST\f[R] contains the name of the +group for the issue. +.PP +\f[I]Note:\f[R] as with other uses of \f[CR]\(atSuppressWarnings\f[R], +using the annotation on a module or package declaration only affects +that declaration; it does not affect the contents of the module or +package in other source files. +.PP +All messages related to an issue are suppressed by the presence of an +appropriate \f[CR]\(atSuppressWarnings\f[R] annotation: this includes +errors as well as warnings. +.PP +\f[I]Note:\f[R] It is only possible to \f[I]suppress\f[R] messages. +If an annotation of \f[CR]\(atSuppressWarnings(\(dqdoclint\(dq)\f[R] is +given on a top\-level declaration, all DocLint messages for that +declaration and any enclosed declarations will be suppressed; it is not +possible to selectively re\-enable messages for issues in enclosed +declarations. +.SS Comparison with downstream validation tools +DocLint is a utility built into \f[CR]javac\f[R] and \f[CR]javadoc\f[R] +that checks the content of documentation comments, as found in source +files. +In contrast, downstream validation tools can be used to validate the +output generated from those documentation comments by \f[CR]javadoc\f[R] +and the standard doclet. +.PP +Although there is some overlap in functionality, the two mechanisms are +different and each has its own strengths and weaknesses. +.IP \(bu 2 +Downstream validation tools can check the end result of any generated +documentation, as it will be seen by the end user. +This includes content from all sources, including documentation +comments, the standard doclet itself, user\-provided taglets, and +content supplied via command\-line options. +Because such tools are analyzing complete HTML pages, they can do more +complete checks than can DocLint. +However, when a problem is found in the generated pages, it can be +harder to track down exactly where in the build pipeline the problem +needs to be fixed. +.IP \(bu 2 +DocLint checks the content of documentation comments, in source files. +This makes it very easy to identify the exact position of any issues +that may be found. +DocLint can also detect some semantic errors in documentation comments +that downstream tools cannot detect, such as missing comments, using an +\f[CR]\(atreturn\f[R] tag in a method returning \f[CR]void\f[R], or an +\f[CR]\(atparam\f[R] tag describing a non\-existent parameter. +But by its nature, DocLint cannot report on problems such as missing +links, or errors in user\-provided custom taglets, or problems in the +standard doclet itself. +It also cannot reliably detect errors in documentation comments at the +boundaries between content in a documentation comment and content +generated by a custom taglet. diff --git a/man/javap.1 b/man/javap.1 new file mode 100644 index 000000000..395233f73 --- /dev/null +++ b/man/javap.1 @@ -0,0 +1,209 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JAVAP" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +javap \- disassemble one or more class files +.SH SYNOPSIS +\f[CR]javap\f[R] [\f[I]options\f[R]] \f[I]classes\f[R]... +.TP +\f[I]options\f[R] +Specifies the command\-line options. +See \f[B]Options for javap\f[R]. +.TP +\f[I]classes\f[R] +Specifies one or more classes separated by spaces to be processed for +annotations. +You can specify a class that can be found in the class path by its file +name, URL, or by its fully qualified class name. +.RS +Examples: +.RS +.PP +\f[CR]path/to/MyClass.class\f[R] +.RE +.RS +.PP +\f[CR]jar:file:///path/to/MyJar.jar!/mypkg/MyClass.class\f[R] +.RE +.RS +.PP +\f[CR]java.lang.Object\f[R] +.RE +.RE +.SH DESCRIPTION +The \f[CR]javap\f[R] command disassembles one or more class files. +The output depends on the options used. +When no options are used, the \f[CR]javap\f[R] command prints the +protected and public fields, and methods of the classes passed to it. +.PP +The \f[CR]javap\f[R] command isn\(aqt multirelease JAR aware. +Using the class path form of the command results in viewing the base +entry in all JAR files, multirelease or not. +Using the URL form, you can use the URL form of an argument to specify a +specific version of a class to be disassembled. +.PP +The \f[CR]javap\f[R] command prints its output to \f[CR]stdout\f[R]. +.PP +\f[B]Note:\f[R] +.PP +In tools that support \f[CR]\-\-\f[R] style options, the GNU\-style +options can use the equal sign (\f[CR]=\f[R]) instead of a white space +to separate the name of an option from its value. +.SH OPTIONS FOR JAVAP +.TP +\f[CR]\-\-help\f[R], \f[CR]\-help\f[R] , \f[CR]\-h\f[R], or \f[CR]\-?\f[R] +Prints a help message for the \f[CR]javap\f[R] command. +.TP +\f[CR]\-version\f[R] +Prints release information. +.TP +\f[CR]\-verbose\f[R] or \f[CR]\-v\f[R] +Prints additional information about the selected class. +.TP +\f[CR]\-l\f[R] +Prints line and local variable tables. +.TP +\f[CR]\-public\f[R] +Shows only public classes and members. +.TP +\f[CR]\-protected\f[R] +Shows only protected and public classes and members. +.TP +\f[CR]\-package\f[R] +Shows package/protected/public classes and members (default). +.TP +\f[CR]\-private\f[R] or \f[CR]\-p\f[R] +Shows all classes and members. +.TP +\f[CR]\-c\f[R] +Prints disassembled code, for example, the instructions that comprise +the Java bytecodes, for each of the methods in the class. +.TP +\f[CR]\-s\f[R] +Prints internal type signatures. +.TP +\f[CR]\-sysinfo\f[R] +Shows system information (path, size, date, SHA\-256 hash) of the class +being processed. +.TP +\f[CR]\-verify\f[R] +Prints additional class verification info. +.TP +\f[CR]\-constants\f[R] +Shows \f[CR]static final\f[R] constants. +.TP +\f[CR]\-\-module\f[R] \f[I]module\f[R] or \f[CR]\-m\f[R] \f[I]module\f[R] +Specifies the module containing classes to be disassembled. +.TP +\f[CR]\-\-module\-path\f[R] \f[I]path\f[R] +Specifies where to find application modules. +.TP +\f[CR]\-\-system\f[R] \f[I]jdk\f[R] +Specifies where to find system modules. +.TP +\f[CR]\-\-class\-path\f[R] \f[I]path\f[R], \f[CR]\-classpath\f[R] \f[I]path\f[R], or \f[CR]\-cp\f[R] \f[I]path\f[R] +Specifies the path that the \f[CR]javap\f[R] command uses to find user +class files. +It overrides the default or the \f[CR]CLASSPATH\f[R] environment +variable when it\(aqs set. +.TP +\f[CR]\-bootclasspath\f[R] \f[I]path\f[R] +Overrides the location of bootstrap class files. +.TP +\f[CR]\-\-multi\-release\f[R] \f[I]version\f[R] +Specifies the version to select in multi\-release JAR files. +.TP +\f[CR]\-J\f[R]\f[I]option\f[R] +Passes the specified option to the JVM. +For example: +.RS +.IP +.EX +javap \-J\-version + +javap \-J\-Djava.security.manager \-J\-Djava.security.policy=MyPolicy MyClassName +.EE +See \f[I]Overview of Java Options\f[R] in \f[B]java\f[R]. +.RE +.SH JAVAP EXAMPLE +Compile the following \f[CR]HelloWorldFrame\f[R] class: +.IP +.EX +import java.awt.Graphics; + +import javax.swing.JFrame; +import javax.swing.JPanel; + +public class HelloWorldFrame extends JFrame { + + String message = \(dqHello World!\(dq; + + public HelloWorldFrame(){ + setContentPane(new JPanel(){ + \(atOverride + protected void paintComponent(Graphics g) { + g.drawString(message, 15, 30); + } + }); + setSize(100, 100); + } + public static void main(String[] args) { + HelloWorldFrame frame = new HelloWorldFrame(); + frame.setVisible(true); + + } + +} +.EE +.PP +The output from the \f[CR]javap HelloWorldFrame.class\f[R] command +yields the following: +.IP +.EX +Compiled from \(dqHelloWorldFrame.java\(dq +public class HelloWorldFrame extends javax.swing.JFrame { + java.lang.String message; + public HelloWorldFrame(); + public static void main(java.lang.String[]); +} +.EE +.PP +The output from the \f[CR]javap \-c HelloWorldFrame.class\f[R] command +yields the following: +.IP +.EX +Compiled from \(dqHelloWorldFrame.java\(dq +public class HelloWorldFrame extends javax.swing.JFrame { + java.lang.String message; + + public HelloWorldFrame(); + Code: + 0: aload_0 + 1: invokespecial #1 // Method javax/swing/JFrame.\(dq<init>\(dq:()V + 4: aload_0 + 5: ldc #2 // String Hello World! + 7: putfield #3 // Field message:Ljava/lang/String; + 10: aload_0 + 11: new #4 // class HelloWorldFrame$1 + 14: dup + 15: aload_0 + 16: invokespecial #5 // Method HelloWorldFrame$1.\(dq<init>\(dq:(LHelloWorldFrame;)V + 19: invokevirtual #6 // Method setContentPane:(Ljava/awt/Container;)V + 22: aload_0 + 23: bipush 100 + 25: bipush 100 + 27: invokevirtual #7 // Method setSize:(II)V + 30: return + + public static void main(java.lang.String[]); + Code: + 0: new #8 // class HelloWorldFrame + 3: dup + 4: invokespecial #9 // Method \(dq<init>\(dq:()V + 7: astore_1 + 8: aload_1 + 9: iconst_1 + 10: invokevirtual #10 // Method setVisible:(Z)V + 13: return +} +.EE diff --git a/man/jcmd.1 b/man/jcmd.1 new file mode 100644 index 000000000..3e4930262 --- /dev/null +++ b/man/jcmd.1 @@ -0,0 +1,1188 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JCMD" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jcmd \- send diagnostic command requests to a running Java Virtual +Machine (JVM) +.SH SYNOPSIS +\f[CR]jcmd\f[R] [\f[I]pid\f[R] | \f[I]main\-class\f[R]] +\f[I]command\f[R]... +| \f[CR]PerfCounter.print\f[R] | \f[CR]\-f\f[R] \f[I]filename\f[R] +.PP +\f[CR]jcmd\f[R] [\f[CR]\-l\f[R]] +.PP +\f[CR]jcmd\f[R] \f[CR]\-h\f[R] +.TP +\f[I]pid\f[R] +When used, the \f[CR]jcmd\f[R] utility sends the diagnostic command +request to the process ID for the Java process. +.TP +\f[I]main\-class\f[R] +When used, the \f[CR]jcmd\f[R] utility sends the diagnostic command +request to all Java processes with the specified name of the main class. +.TP +\f[I]command\f[R] +The \f[CR]command\f[R] must be a valid \f[CR]jcmd\f[R] command for the +selected JVM. +The list of available commands for \f[CR]jcmd\f[R] is obtained by +running the \f[CR]help\f[R] command (\f[CR]jcmd\f[R] \f[I]pid\f[R] +\f[CR]help\f[R]) where \f[I]pid\f[R] is the process ID for the running +Java process. +.TP +\f[CR]Perfcounter.print\f[R] +Prints the performance counters exposed by the specified Java process. +.TP +\f[CR]\-f\f[R] \f[I]filename\f[R] +Reads and executes commands from a specified file, \f[I]filename\f[R]. +.TP +\f[CR]\-l\f[R] +Displays the list of Java Virtual Machine process identifiers that are +not running in a separate docker process along with the main class and +command\-line arguments that were used to launch the process. +If the JVM is in a docker process, you must use tools such as +\f[CR]ps\f[R] to look up the PID. +.RS +\f[B]Note:\f[R] +Using \f[CR]jcmd\f[R] without arguments is the same as using +\f[CR]jcmd \-l\f[R]. +.RE +.TP +\f[CR]\-h\f[R] +Displays the \f[CR]jcmd\f[R] utility\(aqs command\-line help. +.SH DESCRIPTION +The \f[CR]jcmd\f[R] utility is used to send diagnostic command requests +to the JVM. +It must be used on the same machine on which the JVM is running, and +have the same effective user and group identifiers that were used to +launch the JVM. +Each diagnostic command has its own set of options and arguments. +To display the description, syntax, and a list of available options and +arguments for a diagnostic command, use the name of the command as the +argument. +For example: +.RS +.PP +\f[CR]jcmd\f[R] \f[I]pid\f[R] \f[CR]help\f[R] \f[I]command\f[R] +.RE +.PP +If arguments contain spaces, then you must surround them with single or +double quotation marks (\f[CR]\(aq\f[R] or \f[CR]\(dq\f[R]). +In addition, you must escape single or double quotation marks with a +backslash (\f[CR]\(rs\f[R]) to prevent the operating system shell from +processing quotation marks. +Alternatively, you can surround these arguments with single quotation +marks and then with double quotation marks (or with double quotation +marks and then with single quotation marks). +.PP +If you specify the process identifier (\f[I]pid\f[R]) or the main class +(\f[I]main\-class\f[R]) as the first argument, then the \f[CR]jcmd\f[R] +utility sends the diagnostic command request to the Java process with +the specified identifier or to all Java processes with the specified +name of the main class. +You can also send the diagnostic command request to all available Java +processes by specifying \f[CR]0\f[R] as the process identifier. +.SH COMMANDS FOR JCMD +The \f[I]command\f[R] must be a valid \f[CR]jcmd\f[R] diagnostic command +for the selected JVM. +The list of available commands for \f[CR]jcmd\f[R] is obtained by +running the \f[CR]help\f[R] command (\f[CR]jcmd\f[R] \f[I]pid\f[R] +\f[CR]help\f[R]) where \f[I]pid\f[R] is the process ID for a running +Java process. +If the \f[I]pid\f[R] is \f[CR]0\f[R], commands will be sent to all Java +processes. +The main class argument will be used to match, either partially or +fully, the class used to start Java. +If no options are given, it lists the running Java process identifiers +that are not in separate docker processes along with the main class and +command\-line arguments that were used to launch the process (the same +as using \f[CR]\-l\f[R]). +.PP +\f[CR]jcmd\f[R] \f[I]commands\f[R] may take options and arguments. +\f[I]Options\f[R] are specified using either \f[I]key\f[R] or +\f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]Arguments\f[R] are given as just a value, never name=value. +.PP +The following commands are available: +.TP +\f[CR]help\f[R] [\f[I]options\f[R]] [\f[I]arguments\f[R]] +For more information about a specific command. +.RS +\f[I]arguments\f[R]: +.IP \(bu 2 +\f[I]command name\f[R]: The name of the command for which we want help +(STRING, no default value) +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-all\f[R]: (Optional) Show help for all commands (BOOLEAN, false) +\&. +.RE +.TP +\f[CR]AOT.end_recording\f[R] +Ends an in\-progress AOT training and records the results to the file(s) +specified by \f[CR]\-XX:AOTConfiguration\f[R] and/or +\f[CR]\-XX:AOTCacheOutput\f[R]. +.RS +Impact: Low +\f[B]Note:\f[R] +The JVM must be started in AOT training mode using command\-line +arguments such as \f[CR]\-XX:AOTMode=record\f[R] or +\f[CR]\-XX:AOTCacheOutput=<file>\f[R]. +The results of the AOT training can be an AOT configuration file, an AOT +cache file, or both. +.RE +.TP +\f[CR]Compiler.CodeHeap_Analytics\f[R] [\f[I]function\f[R]] [\f[I]granularity\f[R]] +Print CodeHeap analytics +.RS +Impact: Low: Depends on code heap size and content. +Holds CodeCache_lock during analysis step, usually sub\-second duration. +\f[I]arguments\f[R]: +.IP \(bu 2 +\f[I]function\f[R]: (Optional) Function to be performed (aggregate, +UsedSpace, FreeSpace, MethodCount, MethodSpace, MethodAge, MethodNames, +discard (STRING, all) +.IP \(bu 2 +\f[I]granularity\f[R]: (Optional) Detail level \- smaller value \-> more +detail (INT, 4096) +.RE +.TP +\f[CR]Compiler.codecache\f[R] +Prints code cache layout and bounds. +.RS +Impact: Low +.RE +.TP +\f[CR]Compiler.codelist\f[R] +Prints all compiled methods in code cache that are alive. +.RS +Impact: Medium +.RE +.TP +\f[CR]Compiler.directives_add\f[R] \f[I]arguments\f[R] +Adds compiler directives from a file. +.RS +Impact: Low +\f[I]arguments\f[R]: +.IP \(bu 2 +\f[I]filename\f[R]: The name of the directives file (STRING, no default +value) +.RE +.TP +\f[CR]Compiler.directives_clear\f[R] +Remove all compiler directives. +.RS +Impact: Low +.RE +.TP +\f[CR]Compiler.directives_print\f[R] +Prints all active compiler directives. +.RS +Impact: Low +.RE +.TP +\f[CR]Compiler.directives_remove\f[R] +Remove latest added compiler directive. +.RS +Impact: Low +.RE +.TP +\f[CR]Compiler.memory\f[R] [\f[I]options\f[R]] +Print compilation footprint +.RS +Impact: Medium: Pause time depends on number of compiled methods +\f[B]Note:\f[R] +The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or +\f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-H\f[R]: (Optional) Human readable format (BOOLEAN, false) +.IP \(bu 2 +\f[CR]\-s\f[R]: (Optional) Minimum memory size (MEMORY SIZE, 0) +.RE +.TP +\f[CR]Compiler.perfmap\f[R] [\f[I]arguments\f[R]] (Linux only) +Write map file for Linux perf tool. +.RS +Impact: Low +\f[I]arguments\f[R]: +.IP \(bu 2 +\f[I]filename\f[R]: (Optional) The name of the map file. +If %p is specified in the filename, it is expanded to the JVM\(aqs PID. +(FILE, \(dq/tmp/perf\-%p.map\(dq) +.RE +.TP +\f[CR]Compiler.queue\f[R] +Prints methods queued for compilation. +.RS +Impact: Low +.RE +.TP +\f[CR]GC.class_histogram\f[R] [\f[I]options\f[R]] +Provides statistics about the Java heap usage. +.RS +Impact: High \-\-\- depends on Java heap size and content. +\f[B]Note:\f[R] +The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or +\f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-all\f[R]: (Optional) Inspects all objects, including unreachable +objects (BOOLEAN, false) +.IP \(bu 2 +\f[CR]\-parallel\f[R]: (Optional) Number of parallel threads to use for +heap inspection. +0 (the default) means let the VM determine the number of threads to use. +1 means use one thread (disable parallelism). +For any other value the VM will try to use the specified number of +threads, but might use fewer. +(INT, 0) +.RE +.TP +\f[CR]GC.finalizer_info\f[R] +Provides information about the Java finalization queue. +.RS +Impact: Medium +.RE +.TP +\f[CR]GC.heap_dump\f[R] [\f[I]options\f[R]] \f[I]filename\f[R] +Generates a HPROF format dump of the Java heap. +.RS +Impact: High \-\-\- depends on the Java heap size and content. +Request a full GC unless the \f[CR]\-all\f[R] option is specified. +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-all\f[R]: (Optional) Dump all objects, including unreachable +objects (BOOLEAN, false) +.IP \(bu 2 +\f[CR]\-gz\f[R]: (Optional) If specified, the heap dump is written in +gzipped format using the given compression level. +1 (recommended) is the fastest, 9 the strongest compression. +(INT, 1) +.IP \(bu 2 +\f[CR]\-overwrite\f[R]: (Optional) If specified, the dump file will be +overwritten if it exists (BOOLEAN, false) +.IP \(bu 2 +\f[CR]\-parallel\f[R]: (Optional) Number of parallel threads to use for +heap dump. +The VM will try to use the specified number of threads, but might use +fewer. +(INT, 1) +\f[I]arguments\f[R]: +.IP \(bu 2 +\f[I]filename\f[R]: The name of the dump file. +If %p is specified in the filename, it is expanded to the JVM\(aqs PID. +(FILE, no default value) +.RE +.TP +\f[CR]GC.heap_info\f[R] +Provides generic Java heap information. +.RS +Impact: Medium +.RE +.TP +\f[CR]GC.run\f[R] +Calls \f[CR]java.lang.System.gc()\f[R]. +.RS +Impact: Medium \-\-\- depends on the Java heap size and content. +.RE +.TP +\f[CR]GC.run_finalization\f[R] +Calls \f[CR]java.lang.System.runFinalization()\f[R]. +.RS +Impact: Medium \-\-\- depends on the Java content. +.RE +.TP +\f[CR]JFR.check\f[R] [\f[I]options\f[R]] +Show information about a running flight recording +.RS +Impact: Low +\f[B]Note:\f[R] +The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or +\f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +If no parameters are entered, information for all active recordings is +shown. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]name\f[R]: (Optional) Name of the flight recording. +(STRING, no default value) +.IP \(bu 2 +\f[CR]verbose\f[R]: (Optional) Flag for printing the event settings for +the recording (BOOLEAN, false) +.RE +.TP +\f[CR]JFR.configure\f[R] [\f[I]options\f[R]] +Set the parameters for a flight recording +.RS +Impact: Low +\f[B]Note:\f[R] +The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or +\f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +If no parameters are entered, the current settings are displayed. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]dumppath\f[R]: (Optional) Path to the location where a recording +file is written in case the VM runs into a critical error, such as a +system crash. +(STRING, The default location is the current directory) +.IP \(bu 2 +\f[CR]globalbuffercount\f[R]: (Optional) Number of global buffers. +This option is a legacy option: change the \f[CR]memorysize\f[R] +parameter to alter the number of global buffers. +This value cannot be changed once JFR has been initialized. +(STRING, default determined by the value for \f[CR]memorysize\f[R]) +.IP \(bu 2 +\f[CR]globalbuffersize\f[R]: (Optional) Size of the global buffers, in +bytes. +This option is a legacy option: change the \f[CR]memorysize\f[R] +parameter to alter the size of the global buffers. +This value cannot be changed once JFR has been initialized. +(STRING, default determined by the value for \f[CR]memorysize\f[R]) +.IP \(bu 2 +\f[CR]maxchunksize\f[R]: (Optional) Maximum size of an individual data +chunk in bytes if one of the following suffixes is not used: \(aqm\(aq +or \(aqM\(aq for megabytes OR \(aqg\(aq or \(aqG\(aq for gigabytes. +This value cannot be changed once JFR has been initialized. +(STRING, 12M) +.IP \(bu 2 +\f[CR]memorysize\f[R]: (Optional) Overall memory size, in bytes if one +of the following suffixes is not used: \(aqm\(aq or \(aqM\(aq for +megabytes OR \(aqg\(aq or \(aqG\(aq for gigabytes. +This value cannot be changed once JFR has been initialized. +(STRING, 10M) +.IP \(bu 2 +\f[CR]repositorypath\f[R]: (Optional) Path to the location where +recordings are stored until they are written to a permanent file. +(STRING, The default location is the temporary directory for the +operating system. +On Linux operating systems, the temporary directory is \f[CR]/tmp\f[R]. +On Windwows, the temporary directory is specified by the \f[CR]TMP\f[R] +environment variable.) +.IP \(bu 2 +\f[CR]preserve\-repository=\f[R]{\f[CR]true\f[R]|\f[CR]false\f[R]} : +Specifies whether files stored in the disk repository should be kept +after the JVM has exited. +If false, files are deleted. +By default, this parameter is disabled. +.IP \(bu 2 +\f[CR]stackdepth\f[R]: (Optional) Stack depth for stack traces. +Setting this value greater than the default of 64 may cause a +performance degradation. +This value cannot be changed once JFR has been initialized. +(LONG, 64) +.IP \(bu 2 +\f[CR]thread_buffer_size\f[R]: (Optional) Local buffer size for each +thread in bytes if one of the following suffixes is not used: \(aqk\(aq +or \(aqK\(aq for kilobytes or \(aqm\(aq or \(aqM\(aq for megabytes. +Overriding this parameter could reduce performance and is not +recommended. +This value cannot be changed once JFR has been initialized. +(STRING, 8k) +.IP \(bu 2 +\f[CR]samplethreads\f[R]: (Optional) Flag for activating thread +sampling. +(BOOLEAN, true) +.RE +.TP +\f[CR]JFR.dump\f[R] [\f[I]options\f[R]] +Write data to a file while a flight recording is running +.RS +Impact: Low +\f[B]Note:\f[R] +The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or +\f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +No options are required. +The recording continues to run after the data is written. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]begin\f[R]: (Optional) Specify the time from which recording data +will be included in the dump file. +The format is specified as local time. +(STRING, no default value) +.IP \(bu 2 +\f[CR]end\f[R]: (Optional) Specify the time to which recording data will +be included in the dump file. +The format is specified as local time. +(STRING, no default value) +.RS 2 +.PP +\f[B]Note:\f[R] For both \f[CR]begin\f[R] and \f[CR]end\f[R], the time +must be in a format that can be read by +java.time.LocalTime::parse(STRING), +java.time.LocalDateTime::parse(STRING) or +java.time.Instant::parse(STRING). +For example, \(dq13:20:15\(dq, \(dq2020\-03\-17T09:00:00\(dq or +\(dq2020\-03\-17T09:00:00Z\(dq. +.PP +\f[B]Note:\f[R] \f[CR]begin\f[R] and \f[CR]end\f[R] times correspond to +the timestamps found within the recorded information in the flight +recording data. +.PP +Another option is to use a time relative to the current time that is +specified by a negative integer followed by \(dqs\(dq, \(dqm\(dq or +\(dqh\(dq. +For example, \(dq\-12h\(dq, \(dq\-15m\(dq or \(dq\-30s\(dq +.RE +.IP \(bu 2 +\f[CR]filename\f[R]: (Optional) Name of the file to which the flight +recording data is dumped. +If no filename is given, a filename is generated from the PID and the +current date. +The filename may also be a directory in which case, the filename is +generated from the PID and the current date in the specified directory. +If %p and/or %t is specified in the filename, it expands to the JVM\(aqs +PID and the current timestamp, respectively. +(FILE, no default value) +.IP \(bu 2 +\f[CR]maxage\f[R]: (Optional) Length of time for dumping the flight +recording data to a file. +(INTEGER followed by \(aqs\(aq for seconds \(aqm\(aq for minutes or +\(aqh\(aq for hours, no default value) +.IP \(bu 2 +\f[CR]maxsize\f[R]: (Optional) Maximum size for the amount of data to +dump from a flight recording in bytes if one of the following suffixes +is not used: \(aqm\(aq or \(aqM\(aq for megabytes OR \(aqg\(aq or +\(aqG\(aq for gigabytes. +(STRING, no default value) +.IP \(bu 2 +\f[CR]name\f[R]: (Optional) Name of the recording. +If no name is given, data from all recordings is dumped. +(STRING, no default value) +.IP \(bu 2 +\f[CR]path\-to\-gc\-roots\f[R]: (Optional) Flag for saving the path to +garbage collection (GC) roots at the time the recording data is dumped. +The path information is useful for finding memory leaks but collecting +it can cause the application to pause for a short period of time. +Turn on this flag only when you have an application that you suspect has +a memory leak. +(BOOLEAN, false) +.RE +.TP +\f[CR]JFR.start\f[R] [\f[I]options\f[R]] +Start a flight recording +.RS +Impact: Low +\f[B]Note:\f[R] +The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or +\f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +If no parameters are entered, then a recording is started with default +values. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]delay\f[R]: (Optional) Length of time to wait before starting to +record (INTEGER followed by \(aqs\(aq for seconds \(aqm\(aq for minutes +or \(aqh\(aq for hours, 0s) +.IP \(bu 2 +\f[CR]disk\f[R]: (Optional) Flag for also writing the data to disk while +recording (BOOLEAN, true) +.IP \(bu 2 +\f[CR]dumponexit\f[R]: (Optional) Flag for writing the recording to disk +when the Java Virtual Machine (JVM) shuts down. +If set to \(aqtrue\(aq and no value is given for \f[CR]filename\f[R], +the recording is written to a file in the directory where the process +was started. +The file name is a system\-generated name that contains the process ID, +the recording ID and the current time stamp. +(For example: \f[CR]id\-1\-2019_12_12_10_41.jfr\f[R]) (BOOLEAN, false) +.IP \(bu 2 +\f[CR]duration\f[R]: (Optional) Length of time to record. +Note that \f[CR]0s\f[R] means forever (INTEGER followed by \(aqs\(aq for +seconds \(aqm\(aq for minutes or \(aqh\(aq for hours, 0s) +.IP \(bu 2 +\f[CR]filename\f[R]: (Optional) Name of the file to which the flight +recording data is written when the recording is stopped. +If no filename is given, a filename is generated from the PID and the +current date and is placed in the directory where the process was +started. +The filename may also be a directory in which case, the filename is +generated from the PID and the current date in the specified directory. +If %p and/or %t is specified in the filename, it expands to the JVM\(aqs +PID and the current timestamp, respectively. +(FILE, no default value) +.IP \(bu 2 +\f[CR]maxage\f[R]: (Optional) Maximum time to keep the recorded data on +disk. +This parameter is valid only when the \f[CR]disk\f[R] parameter is set +to \f[CR]true\f[R]. +Note \f[CR]0s\f[R] means forever. +(INTEGER followed by \(aqs\(aq for seconds \(aqm\(aq for minutes or +\(aqh\(aq for hours, 0s) +.IP \(bu 2 +\f[CR]maxsize\f[R]: (Optional) Maximum size of the data to keep on disk +in bytes if one of the following suffixes is not used: \(aqm\(aq or +\(aqM\(aq for megabytes OR \(aqg\(aq or \(aqG\(aq for gigabytes. +This parameter is valid only when the \f[CR]disk\f[R] parameter is set +to \(aqtrue\(aq. +The value must not be less than the value for the +\f[CR]maxchunksize\f[R] parameter set with the \f[CR]JFR.configure\f[R] +command. +(STRING, 0 (no maximum size)) +.IP \(bu 2 +\f[CR]name\f[R]: (Optional) Name of the recording. +If no name is provided, a name is generated. +Make note of the generated name that is shown in the response to the +command so that you can use it with other commands. +(STRING, system\-generated default name) +.IP \(bu 2 +\f[CR]path\-to\-gc\-roots\f[R]: (Optional) Flag for saving the path to +garbage collection (GC) roots at the end of a recording. +The path information is useful for finding memory leaks but collecting +it is time consuming. +Turn on this flag only when you have an application that you suspect has +a memory leak. +If the \f[CR]settings\f[R] parameter is set to \(aqprofile\(aq, then the +information collected includes the stack trace from where the potential +leaking object was allocated. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]settings\f[R]: (Optional) Name of the settings file that +identifies which events to record. +To specify more than one file, separate the names with a comma +(\(aq,\(aq). +Include the path if the file is not in \f[CR]JAVA\-HOME\f[R]/lib/jfr. +The following profiles are included with the JDK in the +\f[CR]JAVA\-HOME\f[R]/lib/jfr directory: \(aqdefault.jfc\(aq: collects a +predefined set of information with low overhead, so it has minimal +impact on performance and can be used with recordings that run +continuously; \(aqprofile.jfc\(aq: Provides more data than the +\(aqdefault.jfc\(aq profile, but with more overhead and impact on +performance. +Use this configuration for short periods of time when more information +is needed. +Use \f[CR]none\f[R] to start a recording without a predefined +configuration file. +(STRING, \f[CR]JAVA\-HOME\f[R]/lib/jfr/default.jfc) +Event settings and .jfc options can be specified using the following +syntax: +.IP \(bu 2 +\f[CR]option\f[R]: (Optional) Specifies the option value to modify. +To list available options, use the \f[CR]JAVA_HOME\f[R]/bin/jfr tool. +.IP \(bu 2 +\f[CR]event\-setting\f[R]: (Optional) Specifies the event setting value +to modify. +Use the form: \f[CR]<event\-name>#<setting\-name>=<value>\f[R] To add a +new event setting, prefix the event name with \(aq+\(aq. +You can specify values for multiple event settings and .jfc options by +separating them with a whitespace. +In case of a conflict between a parameter and a .jfc option, the +parameter will take precedence. +The whitespace delimiter can be omitted for timespan values, i.e. +20ms. +For more information about the settings syntax, see Javadoc of the +jdk.jfr package. +.RE +.TP +\f[CR]JFR.stop\f[R] [\f[I]options\f[R]] +Stop a flight recording +.RS +Impact: Low +\f[B]Note:\f[R] +The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or +\f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +If no parameters are entered, then no recording is stopped. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]filename\f[R]: (Optional) Name of the file to which the recording +is written when the recording is stopped. +If %p and/or %t is specified in the filename, it expands to the JVM\(aqs +PID and the current timestamp, respectively. +If no path is provided, the data from the recording is discarded. +(FILE, no default value) +.IP \(bu 2 +\f[CR]name\f[R]: (Optional) Name of the recording (STRING, no default +value) +.RE +.TP +\f[CR]JFR.view\f[R] [\f[I]options\f[R]] +Display event data in predefined views. +.RS +Impact: Medium +\f[B]Note:\f[R] +The \f[I]options\f[R] must be specified using either \f[I]key\f[R] or +\f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +If no parameters are entered, then a list of available views are +displayed. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]cell\-height\f[R]: (Optional) Maximum number of rows in a table +cell. +(INT, default value depends on the view) +.IP \(bu 2 +\f[CR]maxage\f[R]: (Optional) Length of time for the view to span. +(INT followed by \(aqs\(aq for seconds \(aqm\(aq for minutes or +\(aqh\(aq for hours, default value is 10m) +.IP \(bu 2 +\f[CR]maxsize\f[R]: (Optional) Maximum size for the view to span in +bytes if one of the following suffixes is not used: \(aqm\(aq or +\(aqM\(aq for megabytes OR \(aqg\(aq or \(aqG\(aq for gigabytes. +(STRING, default value is 32MB) +.IP \(bu 2 +\f[CR]truncate\f[R]: (Optional) Maximum number of rows in a table cell. +(INT, default value depends on the view) +.IP \(bu 2 +\f[CR]verbose\f[R]: (Optional) Displays the query that makes up the +view. +(BOOLEAN, default value is false) +.IP \(bu 2 +\f[CR]width\f[R]: (Optional) The width of the view in characters. +(INT, default value depends on the view) +\f[I]arguments\f[R]: +.IP \(bu 2 +\f[CR]view\f[R]: Name of the view or event type to display. +Use \f[CR]help JFR.view\f[R] to see a list of available views. +(STRING, no default value) +The view parameter can be an event type name. +Use \f[CR]JFR.view types\f[R] to see a list. +To display all views, use \f[CR]JFR.view all\-views\f[R]. +To display all events, use \f[CR]JFR.view all\-events\f[R]. +.RE +.TP +\f[CR]JVMTI.agent_load\f[R] [\f[I]arguments\f[R]] +Loads JVMTI native agent. +.RS +Impact: Low +\f[I]arguments\f[R]: +.IP \(bu 2 +\f[I]library path\f[R]: Absolute path of the JVMTI agent to load. +(STRING, no default value) +.IP \(bu 2 +\f[I]agent option\f[R]: (Optional) Option string to pass the agent. +(STRING, no default value) +.RE +.TP +\f[CR]JVMTI.data_dump\f[R] +Signal the JVM to do a data\-dump request for JVMTI. +.RS +Impact: High +.RE +.TP +\f[CR]ManagementAgent.start\f[R] [\f[I]options\f[R]] +Starts remote management agent. +.RS +Impact: Low \-\-\- no impact +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]config.file\f[R]: (Optional) Sets +\f[CR]com.sun.management.config.file\f[R] (STRING, no default value) +.IP \(bu 2 +\f[CR]jmxremote.host\f[R]: (Optional) Sets +\f[CR]com.sun.management.jmxremote.host\f[R] (STRING, no default value) +.IP \(bu 2 +\f[CR]jmxremote.port\f[R]: (Optional) Sets +\f[CR]com.sun.management.jmxremote.port\f[R] (STRING, no default value) +.IP \(bu 2 +\f[CR]jmxremote.rmi.port\f[R]: (Optional) Sets +\f[CR]com.sun.management.jmxremote.rmi.port\f[R] (STRING, no default +value) +.IP \(bu 2 +\f[CR]jmxremote.ssl\f[R]: (Optional) Sets +\f[CR]com.sun.management.jmxremote.ssl\f[R] (STRING, no default value) +.IP \(bu 2 +\f[CR]jmxremote.registry.ssl\f[R]: (Optional) Sets +\f[CR]com.sun.management.jmxremote.registry.ssl\f[R] (STRING, no default +value) +.IP \(bu 2 +\f[CR]jmxremote.authenticate\f[R]: (Optional) Sets +\f[CR]com.sun.management.jmxremote.authenticate\f[R] (STRING, no default +value) +.IP \(bu 2 +jmxremote.password.file: (Optional) Sets +\f[CR]com.sun.management.jmxremote.password.file\f[R] (STRING, no +default value) +.IP \(bu 2 +\f[CR]jmxremote.access.file\f[R]: (Optional) Sets +\f[CR]com.sun.management.jmxremote.acce ss.file\f[R] (STRING, no default +value) +.IP \(bu 2 +\f[CR]jmxremote.login.config\f[R]: (Optional) Sets +\f[CR]com.sun.management.jmxremote.log in.config\f[R] (STRING, no +default value) +.IP \(bu 2 +\f[CR]jmxremote.ssl.enabled.cipher.suites\f[R]: (Optional) Sets +\f[CR]com.sun.management\f[R]. +.IP \(bu 2 +\f[CR]jmxremote.ssl.enabled.cipher.suite\f[R]: (STRING, no default +value) +.IP \(bu 2 +\f[CR]jmxremote.ssl.enabled.protocols\f[R]: (Optional) Sets +\f[CR]com.sun.management.jmxr emote.ssl.enabled.protocols\f[R] (STRING, +no default value) +.IP \(bu 2 +\f[CR]jmxremote.ssl.need.client.auth\f[R]: (Optional) Sets +\f[CR]com.sun.management.jmxre mote.need.client.auth\f[R] (STRING, no +default value) +.IP \(bu 2 +\f[CR]jmxremote.ssl.config.file\f[R]: (Optional) Sets +\f[CR]com.sun.management.jmxremote. ssl_config_file\f[R] (STRING, no +default value) +.IP \(bu 2 +\f[CR]jmxremote.autodiscovery\f[R]: (Optional) Sets +\f[CR]com.sun.management.jmxremote.au todiscovery\f[R] (STRING, no +default value) +.IP \(bu 2 +\f[CR]jdp.port\f[R]: (Optional) Sets +\f[CR]com.sun.management.jdp.port\f[R] (INT, no default value) +.IP \(bu 2 +\f[CR]jdp.address\f[R]: (Optional) Sets +\f[CR]com.sun.management.jdp.address\f[R] (STRING, no default value) +.IP \(bu 2 +\f[CR]jdp.source_addr\f[R]: (Optional) Sets +\f[CR]com.sun.management.jdp.source_addr\f[R] (STRING, no default value) +.IP \(bu 2 +\f[CR]jdp.ttl\f[R]: (Optional) Sets +\f[CR]com.sun.management.jdp.ttl\f[R] (INT, no default value) +.IP \(bu 2 +\f[CR]jdp.pause\f[R]: (Optional) Sets +\f[CR]com.sun.management.jdp.pause\f[R] (INT, no default value) +.IP \(bu 2 +\f[CR]jdp.name\f[R]: (Optional) Sets +\f[CR]com.sun.management.jdp.name\f[R] (STRING, no default value) +.RE +.TP +\f[CR]ManagementAgent.start_local\f[R] +Starts the local management agent. +.RS +Impact: Low \-\-\- no impact +.RE +.TP +\f[CR]ManagementAgent.status\f[R] +Print the management agent status. +.RS +Impact: Low \-\-\- no impact +.RE +.TP +\f[CR]ManagementAgent.stop\f[R] +Stops the remote management agent. +.RS +Impact: Low \-\-\- no impact +.RE +.TP +\f[CR]System.dump_map\f[R] [\f[I]options\f[R]] (Linux only) +Dumps an annotated process memory map to an output file. +.RS +Impact: Low +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-H\f[R]: (Optional) Human readable format (BOOLEAN, false) +.IP \(bu 2 +\f[CR]\-F\f[R]: (Optional) File path. +If %p is specified in the filename, it is expanded to the JVM\(aqs PID. +(FILE, \(dqvm_memory_map_%p.txt\(dq) +.RE +.TP +\f[CR]System.map\f[R] [\f[I]options\f[R]] (Linux only) +Prints an annotated process memory map of the VM process. +.RS +Impact: Low +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-H\f[R]: (Optional) Human readable format (BOOLEAN, false) +.RE +.TP +\f[CR]System.native_heap_info\f[R] (Linux only) +Attempts to output information regarding native heap usage through +malloc_info(3). +If unsuccessful outputs \(dqError: \(dq and a reason. +.RS +Impact: Low +.RE +.TP +\f[CR]System.trim_native_heap\f[R] (Linux only) +Attempts to free up memory by trimming the C\-heap. +.RS +Impact: Low +.RE +.TP +\f[CR]Thread.dump_to_file\f[R] [\f[I]options\f[R]] \f[I]filepath\f[R] +Dump threads, with stack traces, to a file in plain text or JSON format. +.RS +Impact: Medium: Depends on the number of threads. +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-overwrite\f[R]: (Optional) May overwrite existing file (BOOLEAN, +false) +.IP \(bu 2 +\f[CR]\-format\f[R]: (Optional) Output format (\(dqplain\(dq or +\(dqjson\(dq) (STRING, plain) +\f[I]arguments\f[R]: +.IP \(bu 2 +\f[I]filepath\f[R]: The file path to the output file. +If %p is specified in the filename, it is expanded to the JVM\(aqs PID. +(FILE, no default value) +.RE +.TP +\f[CR]Thread.print\f[R] [\f[I]options\f[R]] +Prints all threads with stacktraces. +.RS +Impact: Medium \-\-\- depends on the number of threads. +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-e\f[R]: (Optional) Print extended thread information (BOOLEAN, +false) +.IP \(bu 2 +\f[CR]\-l\f[R]: (Optional) Prints \f[CR]java.util.concurrent\f[R] locks +(BOOLEAN, false) +.RE +.TP +\f[CR]Thread.vthread_scheduler\f[R] +Print the virtual thread scheduler, and the delayed task schedulers that +support virtual threads doing timed operations. +.RS +Impact: Low +.RE +.TP +\f[CR]Thread.vthread_pollers\f[R] +Print the I/O pollers that support virtual threads doing blocking +network I/O operations. +.RS +Impact: Low +.RE +.TP +\f[CR]VM.cds\f[R] [\f[I]arguments\f[R]] +Dump a static or dynamic shared archive that includes all currently +loaded classes. +.RS +Impact: Medium \-\-\- pause time depends on number of loaded classes +\f[I]arguments\f[R]: +.IP \(bu 2 +\f[I]subcmd\f[R]: must be either \f[CR]static_dump\f[R] or +\f[CR]dynamic_dump\f[R] (STRING, no default value) +.IP \(bu 2 +\f[I]filename\f[R]: (Optional) Name of the shared archive to be dumped. +If %p is specified in the filename, it is expanded to the JVM\(aqs PID. +(FILE, \(dqjava_pid%p_<subcmd>.jsa\(dq) +If \f[CR]dynamic_dump\f[R] is specified, the target JVM must be started +with the JVM option \f[CR]\-XX:+RecordDynamicDumpInfo\f[R]. +.RE +.TP +\f[CR]VM.class_hierarchy\f[R] [\f[I]options\f[R]] [\f[I]arguments\f[R]] +Print a list of all loaded classes, indented to show the class +hierarchy. +The name of each class is followed by the ClassLoaderData* of its +ClassLoader, or \(dqnull\(dq if it is loaded by the bootstrap class +loader. +.RS +Impact: Medium \-\-\- depends on the number of loaded classes. +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-i\f[R]: (Optional) Inherited interfaces should be printed. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]\-s\f[R]: (Optional) If a classname is specified, print its +subclasses in addition to its superclasses. +Without this option only the superclasses will be printed. +(BOOLEAN, false) +\f[I]arguments\f[R]: +.IP \(bu 2 +\f[I]classname\f[R]: (Optional) The name of the class whose hierarchy +should be printed. +If not specified, all class hierarchies are printed. +(STRING, no default value) +.RE +.TP +\f[CR]VM.classes\f[R] [\f[I]options\f[R]] +Print all loaded classes +.RS +Impact: Medium: Depends on number of loaded classes. +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-verbose\f[R]: (Optional) Dump the detailed content of a Java +class. +Some classes are annotated with flags: \f[CR]F\f[R] = has, or inherits, +a non\-empty finalize method, \f[CR]f\f[R] = has final method, +\f[CR]W\f[R] = methods rewritten, \f[CR]C\f[R] = marked with +\f[CR]\(atContended\f[R] annotation, \f[CR]R\f[R] = has been redefined, +\f[CR]S\f[R] = is shared class (BOOLEAN, false) +.RE +.TP +\f[CR]VM.classloader_stats\f[R] +Print statistics about all ClassLoaders. +.RS +Impact: Low +.RE +.TP +\f[CR]VM.classloaders\f[R] [\f[I]options\f[R]] +Prints classloader hierarchy. +.RS +Impact: Medium \-\-\- Depends on number of class loaders and classes +loaded. +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]show\-classes\f[R]: (Optional) Print loaded classes. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]verbose\f[R]: (Optional) Print detailed information. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]fold\f[R]: (Optional) Show loaders of the same name and class as +one. +(BOOLEAN, true) +.RE +.TP +\f[CR]VM.command_line\f[R] +Print the command line used to start this VM instance. +.RS +Impact: Low +.RE +.TP +\f[CR]VM.dynlibs\f[R] +Print loaded dynamic libraries. +.RS +Impact: Low +.RE +.TP +\f[CR]VM.events\f[R] [\f[I]options\f[R]] +Print VM event logs +.RS +Impact: Low \-\-\- Depends on event log size. +\f[I]options\f[R]: +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +.IP \(bu 2 +\f[CR]log\f[R]: (Optional) Name of log to be printed. +If omitted, all logs are printed. +(STRING, no default value) +.IP \(bu 2 +\f[CR]max\f[R]: (Optional) Maximum number of events to be printed +(newest first). +If omitted or zero, all events are printed. +(INT, 0) +.RE +.TP +\f[CR]VM.flags\f[R] [\f[I]options\f[R]] +Print the VM flag options and their current values. +.RS +Impact: Low +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-all\f[R]: (Optional) Prints all flags supported by the VM +(BOOLEAN, false). +.RE +.TP +\f[CR]VM.info\f[R] +Print information about the JVM environment and status. +.RS +Impact: Low +.RE +.TP +\f[CR]VM.log\f[R] [\f[I]options\f[R]] +Lists current log configuration, enables/disables/configures a log +output, or rotates all logs. +.RS +Impact: Low +\f[I]options\f[R]: +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +.IP \(bu 2 +\f[CR]output\f[R]: (Optional) The name or index (#) of output to +configure. +(STRING, no default value) +.IP \(bu 2 +\f[CR]output_options\f[R]: (Optional) Options for the output. +(STRING, no default value) +.IP \(bu 2 +\f[CR]what\f[R]: (Optional) Configures what tags to log. +(STRING, no default value ) +.IP \(bu 2 +\f[CR]decorators\f[R]: (Optional) Configures which decorators to use. +Use \(aqnone\(aq or an empty value to remove all. +(STRING, no default value) +.IP \(bu 2 +\f[CR]disable\f[R]: (Optional) Turns off all logging and clears the log +configuration. +(BOOLEAN, no default value) +.IP \(bu 2 +\f[CR]list\f[R]: (Optional) Lists current log configuration. +(BOOLEAN, no default value) +.IP \(bu 2 +\f[CR]rotate\f[R]: (Optional) Rotates all logs. +(BOOLEAN, no default value) +.RE +.TP +\f[CR]VM.metaspace\f[R] [\f[I]options\f[R]] +Prints the statistics for the metaspace +.RS +Impact: Medium \-\-\- Depends on number of classes loaded. +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]basic\f[R]: (Optional) Prints a basic summary (does not need a +safepoint). +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]show\-loaders\f[R]: (Optional) Shows usage by class loader. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]show\-classes\f[R]: (Optional) If show\-loaders is set, shows +loaded classes for each loader. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]by\-chunktype\f[R]: (Optional) Break down numbers by chunk type. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]by\-spacetype\f[R]: (Optional) Break down numbers by loader type. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]vslist\f[R]: (Optional) Shows details about the underlying virtual +space. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]chunkfreelist\f[R]: (Optional) Shows details about global chunk +free lists (ChunkManager). +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]scale\f[R]: (Optional) Memory usage in which to scale. +Valid values are: 1, KB, MB or GB (fixed scale) or \(dqdynamic\(dq for a +dynamically chosen scale. +(STRING, dynamic) +.RE +.TP +\f[CR]VM.native_memory\f[R] [\f[I]options\f[R]] +Print native memory usage +.RS +Impact: Medium +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]summary\f[R]: (Optional) Requests runtime to report current memory +summary, which includes total reserved and committed memory, along with +memory usage summary by each subsystem. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]detail\f[R]: (Optional) Requests runtime to report memory +allocation >= 1K by each callsite. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]baseline\f[R]: (Optional) Requests runtime to baseline current +memory usage, so it can be compared against in later time. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]summary.diff\f[R]: (Optional) Requests runtime to report memory +summary comparison against previous baseline. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]detail.diff\f[R]: (Optional) Requests runtime to report memory +detail comparison against previous baseline, which shows the memory +allocation activities at different callsites. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]statistics\f[R]: (Optional) Prints tracker statistics for tuning +purpose. +(BOOLEAN, false) +.IP \(bu 2 +\f[CR]scale\f[R]: (Optional) Memory usage in which scale, KB, MB or GB +(STRING, KB) +.RE +.TP +\f[CR]VM.set_flag\f[R] [\f[I]arguments\f[R]] +Sets VM flag option using the provided value. +.RS +Impact: Low +\f[I]arguments\f[R]: +.IP \(bu 2 +\f[I]flag name\f[R]: The name of the flag that you want to set (STRING, +no default value) +.IP \(bu 2 +\f[I]string value\f[R]: (Optional) The value that you want to set +(STRING, no default value) +.RE +.TP +\f[CR]VM.stringtable\f[R] [\f[I]options\f[R]] +Dump string table. +.RS +Impact: Medium \-\-\- depends on the Java content. +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-verbose\f[R]: (Optional) Dumps the content of each string in the +table (BOOLEAN, false) +.RE +.TP +\f[CR]VM.symboltable\f[R] [\f[I]options\f[R]] +Dump symbol table. +.RS +Impact: Medium \-\-\- depends on the Java content. +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax). +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-verbose\f[R]: (Optional) Dumps the content of each symbol in the +table (BOOLEAN, false) +.RE +.TP +\f[CR]VM.system_properties\f[R] +Print system properties. +.RS +Impact: Low +.RE +.TP +\f[CR]VM.systemdictionary\f[R] +Prints the statistics for dictionary hashtable sizes and bucket length. +.RS +Impact: Medium +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]verbose\f[R]: (Optional) Dump the content of each dictionary entry +for all class loaders (BOOLEAN, false) . +.RE +.TP +\f[CR]VM.uptime\f[R] [\f[I]options\f[R]] +Print VM uptime. +.RS +Impact: Low +\f[B]Note:\f[R] +The following \f[I]options\f[R] must be specified using either +\f[I]key\f[R] or \f[I]key\f[R]\f[CR]=\f[R]\f[I]value\f[R] syntax. +\f[I]options\f[R]: +.IP \(bu 2 +\f[CR]\-date\f[R]: (Optional) Adds a prefix with the current date +(BOOLEAN, false) +.RE +.TP +\f[CR]VM.version\f[R] +Print JVM version information. +.RS +Impact: Low +.RE diff --git a/man/jconsole.1 b/man/jconsole.1 new file mode 100644 index 000000000..28e5fd8d3 --- /dev/null +++ b/man/jconsole.1 @@ -0,0 +1,66 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JCONSOLE" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jconsole \- start a graphical console to monitor and manage Java +applications +.SH SYNOPSIS +\f[CR]jconsole\f[R] [\f[CR]\-interval=\f[R]\f[I]n\f[R]] +[\f[CR]\-notile\f[R]] [\f[CR]\-plugin\f[R] \f[I]path\f[R]] +[\f[CR]\-version\f[R]] [\f[I]connection\f[R] ... +] [\f[CR]\-J\f[R]\f[I]input_arguments\f[R]] +.PP +\f[CR]jconsole\f[R] \f[CR]\-help\f[R] +.SH OPTIONS +.TP +\f[CR]\-interval\f[R] +Sets the update interval to \f[CR]n\f[R] seconds (default is 4 seconds). +.TP +\f[CR]\-notile\f[R] +Doesn\(aqt tile the windows for two or more connections. +.TP +\f[CR]\-pluginpath\f[R] \f[I]path\f[R] +Specifies the path that \f[CR]jconsole\f[R] uses to look up plug\-ins. +The plug\-in \f[I]path\f[R] should contain a provider\-configuration +file named +\f[CR]META\-INF/services/com.sun.tools.jconsole.JConsolePlugin\f[R] that +contains one line for each plug\-in. +The line specifies the fully qualified class name of the class +implementing the \f[CR]com.sun.tools.jconsole.JConsolePlugin\f[R] class. +.TP +\f[CR]\-version\f[R] +Prints the program version. +.TP +\f[I]connection\f[R] = \f[I]pid\f[R] | \f[I]host\f[R]\f[CR]:\f[R]\f[I]port\f[R] | \f[I]jmxURL\f[R] +A connection is described by either \f[I]pid\f[R], +\f[I]host\f[R]\f[CR]:\f[R]\f[I]port\f[R] or \f[I]jmxURL\f[R]. +.RS +.IP \(bu 2 +The \f[I]pid\f[R] value is the process ID of a target process. +The JVM must be running with the same user ID as the user ID running the +\f[CR]jconsole\f[R] command. +.IP \(bu 2 +The \f[I]host\f[R]\f[CR]:\f[R]\f[I]port\f[R] values are the name of the +host system on which the JVM is running, and the port number specified +by the system property \f[CR]com.sun.management.jmxremote.port\f[R] when +the JVM was started. +.IP \(bu 2 +The \f[I]jmxUrl\f[R] value is the address of the JMX agent to be +connected to as described in JMXServiceURL. +.RE +.TP +\f[CR]\-J\f[R]\f[I]input_arguments\f[R] +Passes \f[I]input_arguments\f[R] to the JVM on which the +\f[CR]jconsole\f[R] command is run. +.TP +\f[CR]\-help\f[R] or \f[CR]\-\-help\f[R] +Displays the help message for the command. +.SH DESCRIPTION +The \f[CR]jconsole\f[R] command starts a graphical console tool that +lets you monitor and manage Java applications and virtual machines on a +local or remote machine. +.PP +On Windows, the \f[CR]jconsole\f[R] command doesn\(aqt associate with a +console window. +It does, however, display a dialog box with error information when the +\f[CR]jconsole\f[R] command fails. diff --git a/man/jdb.1 b/man/jdb.1 new file mode 100644 index 000000000..b28b4f675 --- /dev/null +++ b/man/jdb.1 @@ -0,0 +1,233 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JDB" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jdb \- find and fix bugs in Java platform programs +.SH SYNOPSIS +\f[CR]jdb\f[R] [\f[I]options\f[R]] [\f[I]classname\f[R]] +[\f[I]arguments\f[R]] +.TP +\f[I]options\f[R] +This represents the \f[CR]jdb\f[R] command\-line options. +See \f[B]Options for the jdb command\f[R]. +.TP +\f[I]classname\f[R] +This represents the name of the main class to debug. +.TP +\f[I]arguments\f[R] +This represents the arguments that are passed to the \f[CR]main()\f[R] +method of the class. +.SH DESCRIPTION +The Java Debugger (JDB) is a simple command\-line debugger for Java +classes. +The \f[CR]jdb\f[R] command and its options call the JDB. +The \f[CR]jdb\f[R] command demonstrates the Java Platform Debugger +Architecture and provides inspection and debugging of a local or remote +JVM. +.SH START A JDB SESSION +There are many ways to start a JDB session. +The most frequently used way is to have the JDB launch a new JVM with +the main class of the application to be debugged. +Do this by substituting the \f[CR]jdb\f[R] command for the +\f[CR]java\f[R] command in the command line. +For example, if your application\(aqs main class is \f[CR]MyClass\f[R], +then use the following command to debug it under the JDB: +.RS +.PP +\f[CR]jdb MyClass\f[R] +.RE +.PP +When started this way, the \f[CR]jdb\f[R] command calls a second JVM +with the specified parameters, loads the specified class, and stops the +JVM before executing that class\(aqs first instruction. +.PP +Another way to use the \f[CR]jdb\f[R] command is by attaching it to a +JVM that\(aqs already running. +Syntax for starting a JVM to which the \f[CR]jdb\f[R] command attaches +when the JVM is running is as follows. +This loads in\-process debugging libraries and specifies the kind of +connection to be made. +.RS +.PP +\f[CR]java \-agentlib:jdwp=transport=dt_socket,server=y,suspend=n MyClass\f[R] +.RE +.PP +You can then attach the \f[CR]jdb\f[R] command to the JVM with the +following command: +.RS +.PP +\f[CR]jdb \-attach 8000\f[R] +.RE +.PP +8000 is the address of the running JVM. +.PP +The \f[CR]MyClass\f[R] argument isn\(aqt specified in the \f[CR]jdb\f[R] +command line in this case because the \f[CR]jdb\f[R] command is +connecting to an existing JVM instead of launching a new JVM. +.PP +There are many other ways to connect the debugger to a JVM, and all of +them are supported by the \f[CR]jdb\f[R] command. +The Java Platform Debugger Architecture has additional documentation on +these connection options. +.SH BREAKPOINTS +Breakpoints can be set in the JDB at line numbers or at the first +instruction of a method, for example: +.IP \(bu 2 +The command \f[CR]stop at MyClass:22\f[R] sets a breakpoint at the first +instruction for line 22 of the source file containing +\f[CR]MyClass\f[R]. +.IP \(bu 2 +The command \f[CR]stop in java.lang.String.length\f[R] sets a breakpoint +at the beginning of the method \f[CR]java.lang.String.length\f[R]. +.IP \(bu 2 +The command \f[CR]stop in MyClass.<clinit>\f[R] uses \f[CR]<clinit>\f[R] +to identify the static initialization code for \f[CR]MyClass\f[R]. +.PP +When a method is overloaded, you must also specify its argument types so +that the proper method can be selected for a breakpoint. +For example, \f[CR]MyClass.myMethod(int,java.lang.String)\f[R] or +\f[CR]MyClass.myMethod()\f[R]. +.PP +The \f[CR]clear\f[R] command removes breakpoints using the following +syntax: \f[CR]clear MyClass:45\f[R]. +Using the \f[CR]clear\f[R] or \f[CR]stop\f[R] command with no argument +displays a list of all breakpoints currently set. +The \f[CR]cont\f[R] command continues execution. +.SH STEPPING +The \f[CR]step\f[R] command advances execution to the next line whether +it\(aqs in the current stack frame or a called method. +The \f[CR]next\f[R] command advances execution to the next line in the +current stack frame. +.SH EXCEPTIONS +When an exception occurs for which there isn\(aqt a \f[CR]catch\f[R] +statement anywhere in the throwing thread\(aqs call stack, the JVM +typically prints an exception trace and exits. +When running under the JDB, however, control returns to the JDB at the +offending throw. +You can then use the \f[CR]jdb\f[R] command to diagnose the cause of the +exception. +.PP +Use the \f[CR]catch\f[R] command to cause the debugged application to +stop at other thrown exceptions, for example: +\f[CR]catch java.io.FileNotFoundException\f[R] or \f[CR]catch\f[R] +\f[CR]mypackage.BigTroubleException\f[R]. +Any exception that\(aqs an instance of the specified class or subclass +stops the application at the point where the exception is thrown. +.PP +The \f[CR]ignore\f[R] command negates the effect of an earlier +\f[CR]catch\f[R] command. +The \f[CR]ignore\f[R] command doesn\(aqt cause the debugged JVM to +ignore specific exceptions, but only to ignore the debugger. +.SH OPTIONS FOR THE JDB COMMAND +When you use the \f[CR]jdb\f[R] command instead of the \f[CR]java\f[R] +command on the command line, the \f[CR]jdb\f[R] command accepts many of +the same options as the \f[CR]java\f[R] command. +.PP +The following options are accepted by the \f[CR]jdb\f[R] command: +.TP +\f[CR]\-help\f[R] +Displays a help message. +.TP +\f[CR]\-sourcepath\f[R] \f[I]dir1\f[R]\f[CR]:\f[R]\f[I]dir2\f[R]\f[CR]:\f[R]... +Uses the specified path to search for source files in the specified +path. +If this option is not specified, then use the default path of dot +(\f[CR].\f[R]). +.TP +\f[CR]\-attach\f[R] \f[I]address\f[R] +Attaches the debugger to a running JVM with the default connection +mechanism. +.TP +\f[CR]\-listen\f[R] \f[I]address\f[R] +Waits for a running JVM to connect to the specified address with a +standard connector. +.TP +\f[CR]\-listenany\f[R] +Waits for a running JVM to connect at any available address using a +standard connector. +.TP +\f[CR]\-launch\f[R] +Starts the debugged application immediately upon startup of the +\f[CR]jdb\f[R] command. +The \f[CR]\-launch\f[R] option removes the need for the \f[CR]run\f[R] +command. +The debugged application is launched and then stopped just before the +initial application class is loaded. +At that point, you can set any necessary breakpoints and use the +\f[CR]cont\f[R] command to continue execution. +.TP +\f[CR]\-listconnectors\f[R] +Lists the connectors available in this JVM. +.TP +\f[CR]\-connect\f[R] \f[I]connector\-name\f[R]\f[CR]:\f[R]\f[I]name1\f[R]\f[CR]=\f[R]\f[I]value1\f[R].... +Connects to the target JVM with the named connector and listed argument +values. +.TP +\f[CR]\-dbgtrace\f[R] [\f[I]flags\f[R]] +Prints information for debugging the \f[CR]jdb\f[R] command. +.TP +\f[CR]\-tclient\f[R] +Runs the application in the Java HotSpot VM client. +.TP +\f[CR]\-trackallthreads\f[R] +Track all threads as they are created, including virtual threads. +See \f[B]Working With Virtual Threads\f[R] below. +.TP +\f[CR]\-tserver\f[R] +Runs the application in the Java HotSpot VM server. +.TP +\f[CR]\-J\f[R]\f[I]option\f[R] +Passes \f[I]option\f[R] to the JDB JVM, where option is one of the +options described on the reference page for the Java application +launcher. +For example, \f[CR]\-J\-Xms48m\f[R] sets the startup memory to 48 MB. +See \f[I]Overview of Java Options\f[R] in \f[B]java\f[R]. +.PP +The following options are forwarded to the debuggee process: +.TP +\f[CR]\-R\f[R]\f[I]option\f[R] +Passes \f[I]option\f[R] to the debuggee JVM, where option is one of the +options described on the reference page for the Java application +launcher. +For example, \f[CR]\-R\-Xms48m\f[R] sets the startup memory to 48 MB. +See \f[I]Overview of Java Options\f[R] in \f[B]java\f[R]. +.TP +\f[CR]\-v\f[R] or \f[CR]\-verbose\f[R][\f[CR]:\f[R]\f[I]class\f[R]|\f[CR]gc\f[R]|\f[CR]jni\f[R]] +Turns on the verbose mode. +.TP +\f[CR]\-D\f[R]\f[I]name\f[R]\f[CR]=\f[R]\f[I]value\f[R] +Sets a system property. +.TP +\f[CR]\-classpath\f[R] \f[I]dir\f[R] +Lists directories separated by colons in which to look for classes. +.TP +\f[CR]\-X\f[R] \f[I]option\f[R] +A nonstandard target JVM option. +.PP +Other options are supported to provide alternate mechanisms for +connecting the debugger to the JVM that it\(aqs to debug. +.SH WORKING WITH VIRTUAL THREADS +Often virtual theads are created in such large numbers and frequency +that they can overwhelm a debugger. +For this reason by default JDB does not keep track of virtual threads as +they are created. +It will only keep track of virtual threads that an event has arrived on, +such as a breakpoint event. +The \f[CR]\-trackallthreads\f[R] option can be used to make JDB track +all virtual threads as they are created. +.PP +When JDB first connects, it requests a list of all known threads from +the Debug Agent. +By default the debug agent does not return any virtual threads in this +list, once again because the list could be so large that it overwhelms +the debugger. +The Debug Agent has an \f[CR]includevirtualthreads\f[R] option that can +be enabled to change this behavior so all known virtual threads will be +included in the list. +The JDB \f[CR]\-trackallthreads\f[R] option will cause JDB to +automatically enable the Debug Agent\(aqs +\f[CR]includevirtualthreads\f[R] option when JDB launches an application +to debug. +However, keep in mind that the Debug Agent may not know about any +virtual threads that were created before JDB attached to the debugged +application. diff --git a/man/jdeprscan.1 b/man/jdeprscan.1 new file mode 100644 index 000000000..14604affe --- /dev/null +++ b/man/jdeprscan.1 @@ -0,0 +1,209 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JDEPRSCAN" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jdeprscan \- static analysis tool that scans a jar file (or some other +aggregation of class files) for uses of deprecated API elements +.SH SYNOPSIS +\f[CR]jdeprscan\f[R] [\f[I]options\f[R]] +{\f[I]dir\f[R]|\f[I]jar\f[R]|\f[I]class\f[R]} +.TP +\f[I]options\f[R] +See \f[B]Options for the jdeprscan Command\f[R] +.TP +\f[I]dir\f[R]|\f[I]jar\f[R]|\f[I]class\f[R] +\f[CR]jdeprscan\f[R] command scans each argument for usages of +deprecated APIs. +The arguments can be a: +.RS +.IP \(bu 2 +\f[I]dir\f[R]: Directory +.IP \(bu 2 +\f[I]jar\f[R]: JAR file +.IP \(bu 2 +\f[I]class\f[R]: Class name or class file +The class name should use a dot (\f[CR].\f[R]) as a separator. +For example: +\f[CR]java.lang.Thread\f[R] +For nested classes, the dollar sign \f[CR]$\f[R] separator character +should be used. +For example: +\f[CR]java.lang.Thread$State\f[R] +A class file can also be named. +For example: +\f[CR]build/classes/java/lang/Thread$State.class\f[R] +.RE +.SH DESCRIPTION +The \f[CR]jdeprscan\f[R] tool is a static analysis tool provided by the +JDK that scans a JAR file or some other aggregation of class files for +uses of deprecated API elements. +The deprecated APIs identified by the \f[CR]jdeprscan\f[R] tool are only +those that are defined by Java SE. +Deprecated APIs defined by third\-party libraries aren\(aqt reported. +.PP +To scan a JAR file or a set of class files, you must first ensure that +all of the classes that the scanned classes depend upon are present in +the class path. +Set the class path using the \f[CR]\-\-class\-path\f[R] option described +in \f[B]Options for the jdeprscan Command\f[R]. +Typically, you would use the same class path as the one that you use +when invoking your application. +.PP +If the \f[CR]jdeprscan\f[R] can\(aqt find all the dependent classes, it +will generate an error message for each class that\(aqs missing. +These error messages are typically of the form: +.RS +.PP +\f[CR]error: cannot find class ...\f[R] +.RE +.PP +If these errors occur, then you must adjust the class path so that it +includes all dependent classes. +.SH OPTIONS FOR THE JDEPRSCAN COMMAND +The following options are available: +.TP +\f[CR]\-\-class\-path\f[R] \f[I]path\f[R] +Provides a search path for resolution of dependent classes. +.RS +\f[I]path\f[R] can be a search path that consists of one or more +directories separated by the system\-specific path separator. +For example: +.IP \(bu 2 +\f[B]Linux and macOS:\f[R] +.RS 2 +.RS +.PP +\f[CR]\-\-class\-path /some/directory:/another/different/dir\f[R] +.RE +.RE +\f[B]Note:\f[R] +On Windows, use a semicolon (\f[CR];\f[R]) as the separator instead of a +colon (\f[CR]:\f[R]). +.IP \(bu 2 +\f[B]Windows:\f[R] +.RS 2 +.RS +.PP +\f[CR]\-\-class\-path \(rssome\(rsdirectory;\(rsanother\(rsdifferent\(rsdir\f[R] +.RE +.RE +.RE +.TP +\f[CR]\-\-for\-removal\f[R] +Limits scanning or listing to APIs that are deprecated for removal. +Can\(aqt be used with a release value of 6, 7, or 8. +.TP +\f[CR]\-\-full\-version\f[R] +Prints out the full version string of the tool. +.TP +\f[CR]\-\-help\f[R] or \f[CR]\-h\f[R] +Prints out a full help message. +.TP +\f[CR]\-\-list\f[R] or \f[CR]\-l\f[R] +Prints the set of deprecated APIs. +No scanning is done, so no directory, jar, or class arguments should be +provided. +.TP +\f[CR]\-\-release\f[R] \f[CR]6\f[R]|\f[CR]7\f[R]|\f[CR]8\f[R]|\f[CR]9\f[R] +Specifies the Java SE release that provides the set of deprecated APIs +for scanning. +.TP +\f[CR]\-\-verbose\f[R] or \f[CR]\-v\f[R] +Enables additional message output during processing. +.TP +\f[CR]\-\-version\f[R] +Prints out the abbreviated version string of the tool. +.SH EXAMPLE OF JDEPRSCAN OUTPUT +The JAR file for this library will be named something similar to +\f[CR]commons\-math3\-3.6.1.jar\f[R]. +To scan this JAR file for the use of deprecated APIs, run the following +command: +.RS +.PP +\f[CR]jdeprscan commons\-math3\-3.6.1.jar\f[R] +.RE +.PP +This command produces several lines of output. +For example, one line of output might be: +.IP +.EX +class org/apache/commons/math3/util/MathUtils uses deprecated method java/lang/Double::<init>(D)V +.EE +.PP +\f[B]Note:\f[R] +.PP +The class name is specified using the slash\-separated binary name as +described in JVMS 4.2.1. +This is the form used internally in class files. +.PP +The deprecated API it uses is a method on the +\f[CR]java.lang.Double\f[R] class. +.PP +The name of the deprecated method is \f[CR]<init>\f[R], which is a +special name that means that the method is actually a constructor. +Another special name is \f[CR]<clinit>\f[R], which indicates a class +static initializer. +.PP +Other methods are listed just by their method name. +Following the method name is the argument list and return type: +.RS +.PP +\f[CR](D)V\f[R] +.RE +.PP +This indicates that it takes just one double value (a primitive) and +returns void. +The argument and return types can become cryptic. +For example, another line of output might be: +.IP +.EX +class org/apache/commons/math3/util/Precision uses deprecated method java/math/BigDecimal::setScale(II)Ljava/math/BigDecimal; +.EE +.PP +In this line of output, the deprecated method is on class +\f[CR]java.math.BigDecimal\f[R], and the method is +\f[CR]setScale()\f[R]. +In this case, the \f[CR](II)\f[R] means that it takes two \f[CR]int\f[R] +arguments. +The \f[CR]Ljava/math/BigDecimal;\f[R] after the parentheses means that +it returns a reference to \f[CR]java.math.BigDecimal\f[R]. +.SH JDEPRSCAN ANALYSIS CAN BE VERSION\-SPECIFIC +You can use \f[CR]jdeprscan\f[R] relative to the previous three JDK +releases. +For example, if you are running JDK 9, then you can check against JDK 8, +7, and 6. +.PP +As an example, look at this code snippet: +.IP +.EX +public class Deprecations { + SecurityManager sm = new RMISecurityManager(); // deprecated in 8 + Boolean b2 = new Boolean(true); // deprecated in 9 +} +.EE +.PP +The complete class compiles without warnings in JDK 7. +.PP +If you run \f[CR]jdeprscan\f[R] on a system with JDK 9, then you see: +.IP +.EX +$ jdeprscan \-\-class\-path classes \-\-release 7 example.Deprecations +(no output) +.EE +.PP +Run \f[CR]jdeprscan\f[R] with a release value of 8: +.IP +.EX +$ jdeprscan \-\-class\-path classes \-\-release 8 example.Deprecations +class example/Deprecations uses type java/rmi/RMISecurityManager deprecated +class example/Deprecations uses method in type java/rmi/RMISecurityManager deprecated +.EE +.PP +Run \f[CR]jdeprscan\f[R] on JDK 9: +.IP +.EX +$ jdeprscan \-\-class\-path classes example.Deprecations +class example/Deprecations uses type java/rmi/RMISecurityManager deprecated +class example/Deprecations uses method in type java/rmi/RMISecurityManager deprecated +class example/Deprecations uses method java/lang/Boolean <init> (Z)V deprecated +.EE diff --git a/man/jdeps.1 b/man/jdeps.1 new file mode 100644 index 000000000..1023a474c --- /dev/null +++ b/man/jdeps.1 @@ -0,0 +1,292 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JDEPS" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jdeps \- launch the Java class dependency analyzer +.SH SYNOPSIS +\f[CR]jdeps\f[R] [\f[I]options\f[R]] \f[I]path\f[R] ... +.TP +\f[I]options\f[R] +Command\-line options. +For detailed descriptions of the options that can be used, see +.RS +.IP \(bu 2 +\f[B]Possible Options\f[R] +.IP \(bu 2 +\f[B]Module Dependence Analysis Options\f[R] +.IP \(bu 2 +\f[B]Options to Filter Dependences\f[R] +.IP \(bu 2 +\f[B]Options to Filter Classes to be Analyzed\f[R] +.RE +.TP +\f[I]path\f[R] +A pathname to the \f[CR].class\f[R] file, directory, or JAR file to +analyze. +.SH DESCRIPTION +The \f[CR]jdeps\f[R] command shows the package\-level or class\-level +dependencies of Java class files. +The input class can be a path name to a \f[CR].class\f[R] file, a +directory, a JAR file, or it can be a fully qualified class name to +analyze all class files. +The options determine the output. +By default, the \f[CR]jdeps\f[R] command writes the dependencies to the +system output. +The command can generate the dependencies in DOT language (see the +\f[CR]\-dotoutput\f[R] option). +.SH POSSIBLE OPTIONS +.TP +\f[CR]\-?\f[R] or \f[CR]\-h\f[R] or \f[CR]\-\-help\f[R] +Prints the help message. +.TP +\f[CR]\-dotoutput\f[R] \f[I]dir\f[R] or \f[CR]\-\-dot\-output\f[R] \f[I]dir\f[R] +Specifies the destination directory for DOT file output. +If this option is specified, then the \f[CR]jdeps\f[R]command generates +one \f[CR].dot\f[R] file for each analyzed archive named +\f[CR]archive\-file\-name.dot\f[R] that lists the dependencies, and also +a summary file named \f[CR]summary.dot\f[R] that lists the dependencies +among the archive files. +.TP +\f[CR]\-s\f[R] or \f[CR]\-summary\f[R] +Prints a dependency summary only. +.TP +\f[CR]\-v\f[R] or \f[CR]\-verbose\f[R] +Prints all class\-level dependencies. +This is equivalent to +.RS +.RS +.PP +\f[CR]\-verbose:class \-filter:none\f[R] +.RE +.RE +.TP +\f[CR]\-verbose:package\f[R] +Prints package\-level dependencies excluding, by default, dependences +within the same package. +.TP +\f[CR]\-verbose:class\f[R] +Prints class\-level dependencies excluding, by default, dependencies +within the same archive. +.TP +\f[CR]\-apionly\f[R] or \f[CR]\-\-api\-only\f[R] +Restricts the analysis to APIs, for example, dependences from the +signature of \f[CR]public\f[R] and \f[CR]protected\f[R] members of +public classes including field type, method parameter types, returned +type, and checked exception types. +.TP +\f[CR]\-jdkinternals\f[R] or \f[CR]\-\-jdk\-internals\f[R] +Finds class\-level dependences in the JDK internal APIs. +By default, this option analyzes all classes specified in the +\f[CR]\-\-classpath\f[R] option and input files unless you specified the +\f[CR]\-include\f[R] option. +You can\(aqt use this option with the \f[CR]\-p\f[R], \f[CR]\-e\f[R], +and \f[CR]\-s\f[R] options. +.RS +\f[B]Warning\f[R]: The JDK internal APIs are inaccessible. +.RE +.TP +\f[CR]\-cp\f[R] \f[I]path\f[R], \f[CR]\-classpath\f[R] \f[I]path\f[R], or \f[CR]\-\-class\-path\f[R] \f[I]path\f[R] +Specifies where to find class files. +.TP +\f[CR]\-\-module\-path\f[R] \f[I]module\-path\f[R] +Specifies the module path. +.TP +\f[CR]\-\-upgrade\-module\-path\f[R] \f[I]module\-path\f[R] +Specifies the upgrade module path. +.TP +\f[CR]\-\-system\f[R] \f[I]java\-home\f[R] +Specifies an alternate system module path. +.TP +\f[CR]\-\-add\-modules\f[R] \f[I]module\-name\f[R][\f[CR],\f[R] \f[I]module\-name\f[R]...] +Adds modules to the root set for analysis. +.TP +\f[CR]\-\-multi\-release\f[R] \f[I]version\f[R] +Specifies the version when processing multi\-release JAR files. +\f[I]version\f[R] should be an integer >=9 or base. +.TP +\f[CR]\-q\f[R] or \f[CR]\-quiet\f[R] +Doesn\(aqt show missing dependencies from +\f[CR]\-generate\-module\-info\f[R] output. +.TP +\f[CR]\-version\f[R] or \f[CR]\-\-version\f[R] +Prints version information. +.SH MODULE DEPENDENCE ANALYSIS OPTIONS +.TP +\f[CR]\-m\f[R] \f[I]module\-name\f[R] or \f[CR]\-\-module\f[R] \f[I]module\-name\f[R] +Specifies the root module for analysis. +.TP +\f[CR]\-\-generate\-module\-info\f[R] \f[I]dir\f[R] +Generates \f[CR]module\-info.java\f[R] under the specified directory. +The specified JAR files will be analyzed. +This option cannot be used with \f[CR]\-\-dot\-output\f[R] or +\f[CR]\-\-class\-path\f[R] options. +Use the \f[CR]\-\-generate\-open\-module\f[R] option for open modules. +.TP +\f[CR]\-\-generate\-open\-module\f[R] \f[I]dir\f[R] +Generates \f[CR]module\-info.java\f[R] for the specified JAR files under +the specified directory as open modules. +This option cannot be used with the \f[CR]\-\-dot\-output\f[R] or +\f[CR]\-\-class\-path\f[R] options. +.TP +\f[CR]\-\-check\f[R] \f[I]module\-name\f[R] [\f[CR],\f[R] \f[I]module\-name\f[R]...] +Analyzes the dependence of the specified modules. +It prints the module descriptor, the resulting module dependences after +analysis and the graph after transition reduction. +It also identifies any unused qualified exports. +.TP +\f[CR]\-\-list\-deps\f[R] +Lists the module dependences and also the package names of JDK internal +APIs (if referenced). +This option transitively analyzes libraries on class path and module +path if referenced. +Use \f[CR]\-\-no\-recursive\f[R] option for non\-transitive dependency +analysis. +.TP +\f[CR]\-\-list\-reduced\-deps\f[R] +Same as \f[CR]\-\-list\-deps\f[R] without listing the implied reads +edges from the module graph. +If module M1 reads M2, and M2 requires transitive on M3, then M1 reading +M3 is implied and is not shown in the graph. +.TP +\f[CR]\-\-print\-module\-deps\f[R] +Same as \f[CR]\-\-list\-reduced\-deps\f[R] with printing a +comma\-separated list of module dependences. +The output can be used by \f[CR]jlink \-\-add\-modules\f[R] to create a +custom image that contains those modules and their transitive +dependences. +.TP +\f[CR]\-\-ignore\-missing\-deps\f[R] +Ignore missing dependences. +.SH OPTIONS TO FILTER DEPENDENCES +.TP +\f[CR]\-p\f[R] \f[I]pkg_name\f[R], \f[CR]\-package\f[R] \f[I]pkg_name\f[R], or \f[CR]\-\-package\f[R] \f[I]pkg_name\f[R] +Finds dependences matching the specified package name. +You can specify this option multiple times for different packages. +The \f[CR]\-p\f[R] and \f[CR]\-e\f[R] options are mutually exclusive. +.TP +\f[CR]\-e\f[R] \f[I]regex\f[R], \f[CR]\-regex\f[R] \f[I]regex\f[R], or \f[CR]\-\-regex\f[R] \f[I]regex\f[R] +Finds dependences matching the specified pattern. +The \f[CR]\-p\f[R] and \f[CR]\-e\f[R] options are mutually exclusive. +.TP +\f[CR]\-\-require\f[R] \f[I]module\-name\f[R] +Finds dependences matching the given module name (may be given multiple +times). +The \f[CR]\-\-package\f[R], \f[CR]\-\-regex\f[R], and +\f[CR]\-\-require\f[R] options are mutually exclusive. +.TP +\f[CR]\-f\f[R] \f[I]regex\f[R] or \f[CR]\-filter\f[R] \f[I]regex\f[R] +Filters dependences matching the given pattern. +If give multiple times, the last one will be selected. +.TP +\f[CR]\-filter:package\f[R] +Filters dependences within the same package. +This is the default. +.TP +\f[CR]\-filter:archive\f[R] +Filters dependences within the same archive. +.TP +\f[CR]\-filter:module\f[R] +Filters dependences within the same module. +.TP +\f[CR]\-filter:none\f[R] +No \f[CR]\-filter:package\f[R] and \f[CR]\-filter:archive\f[R] +filtering. +Filtering specified via the \f[CR]\-filter\f[R] option still applies. +.TP +\f[CR]\-\-missing\-deps\f[R] +Finds missing dependences. +This option cannot be used with \f[CR]\-p\f[R], \f[CR]\-e\f[R] and +\f[CR]\-s\f[R] options. +.SH OPTIONS TO FILTER CLASSES TO BE ANALYZED +.TP +\f[CR]\-include\f[R] \f[I]regex\f[R] +Restricts analysis to the classes matching pattern. +This option filters the list of classes to be analyzed. +It can be used together with \f[CR]\-p\f[R] and \f[CR]\-e\f[R], which +apply the pattern to the dependencies. +.TP +\f[CR]\-R\f[R] or \f[CR]\-\-recursive\f[R] +Recursively traverses all run\-time dependences. +The \f[CR]\-R\f[R] option implies \f[CR]\-filter:none\f[R]. +If \f[CR]\-p\f[R], \f[CR]\-e\f[R], or \f[CR]\-f\f[R] options are +specified, only the matching dependences are analyzed. +.TP +\f[CR]\-\-no\-recursive\f[R] +Do not recursively traverse dependences. +.TP +\f[CR]\-I\f[R] or \f[CR]\-\-inverse\f[R] +Analyzes the dependences per other given options and then finds all +artifacts that directly and indirectly depend on the matching nodes. +This is equivalent to the inverse of the compile\-time view analysis and +the print dependency summary. +This option must be used with the \f[CR]\-\-require\f[R], +\f[CR]\-\-package\f[R], or \f[CR]\-\-regex\f[R] options. +.TP +\f[CR]\-\-compile\-time\f[R] +Analyzes the compile\-time view of transitive dependencies, such as the +compile\-time view of the \f[CR]\-R\f[R] option. +Analyzes the dependences per other specified options. +If a dependency is found from a directory, a JAR file or a module, all +classes in that containing archive are analyzed. +.SH EXAMPLE OF ANALYZING DEPENDENCIES +The following example demonstrates analyzing the dependencies of the +\f[CR]Notepad.jar\f[R] file. +.PP +\f[B]Linux and macOS:\f[R] +.IP +.EX +$ jdeps demo/jfc/Notepad/Notepad.jar +Notepad.jar \-> java.base +Notepad.jar \-> java.desktop +Notepad.jar \-> java.logging + <unnamed> (Notepad.jar) + \-> java.awt + \-> java.awt.event + \-> java.beans + \-> java.io + \-> java.lang + \-> java.net + \-> java.util + \-> java.util.logging + \-> javax.swing + \-> javax.swing.border + \-> javax.swing.event + \-> javax.swing.text + \-> javax.swing.tree + \-> javax.swing.undo +.EE +.PP +\f[B]Windows:\f[R] +.IP +.EX +C:\(rsJava\(rsjdk1.9.0>jdeps demo\(rsjfc\(rsNotepad\(rsNotepad.jar +Notepad.jar \-> java.base +Notepad.jar \-> java.desktop +Notepad.jar \-> java.logging + <unnamed> (Notepad.jar) + \-> java.awt + \-> java.awt.event + \-> java.beans + \-> java.io + \-> java.lang + \-> java.net + \-> java.util + \-> java.util.logging + \-> javax.swing + \-> javax.swing.border + \-> javax.swing.event + \-> javax.swing.text + \-> javax.swing.tree + \-> javax.swing.undo +.EE +.SH EXAMPLE USING THE \-\-INVERSE OPTION +.IP +.EX + $ jdeps \-\-inverse \-\-require java.xml.bind +Inverse transitive dependences on [java.xml.bind] +java.xml.bind <\- java.se.ee +java.xml.bind <\- jdk.xml.ws +java.xml.bind <\- java.xml.ws <\- java.se.ee +java.xml.bind <\- java.xml.ws <\- jdk.xml.ws +java.xml.bind <\- jdk.xml.bind <\- jdk.xml.ws +.EE diff --git a/man/jfr.1 b/man/jfr.1 new file mode 100644 index 000000000..1f685f146 --- /dev/null +++ b/man/jfr.1 @@ -0,0 +1,396 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JFR" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jfr \- print and manipulate Flight Recorder files +.SH SYNOPSIS +To print the contents of a flight recording to standard out: +.PP +\f[CR]jfr\f[R] \f[CR]print\f[R] [\f[I]options\f[R]] \f[I]file\f[R] +.PP +To display aggregated event data on standard out: +.PP +\f[CR]jfr\f[R] \f[CR]view\f[R] [\f[I]options\f[R]] \f[I]file\f[R] +.PP +To configure a .jfc settings file: +.PP +\f[CR]jfr\f[R] \f[CR]configure\f[R] [\f[I]options\f[R]] +.PP +To print metadata information about flight recording events: +.PP +\f[CR]jfr\f[R] \f[CR]metadata\f[R] [\f[I]file\f[R]] +.PP +To view the summary statistics for a flight recording file: +.PP +\f[CR]jfr\f[R] \f[CR]summary\f[R] \f[I]file\f[R] +.PP +To remove events from a flight recording file: +.PP +\f[CR]jfr\f[R] \f[CR]scrub\f[R] [\f[I]options\f[R]] \f[I]file\f[R] +.PP +To assemble chunk files into a flight recording file: +.PP +\f[CR]jfr\f[R] \f[CR]assemble\f[R] \f[I]repository\f[R] \f[I]file\f[R] +.PP +To disassemble a flight recording file into chunk files: +.PP +\f[CR]jfr\f[R] \f[CR]disassmble\f[R] [\f[I]options\f[R]] \f[I]file\f[R] +.TP +\f[I]options\f[R] +Optional: Specifies command\-line options separated by spaces. +See the individual subcomponent sections for descriptions of the +available options. +.TP +\f[I]file\f[R] +Specifies the name of the target flight recording file +(\f[CR].jfr\f[R]). +.TP +\f[I]repository\f[R] +Specifies the location of the chunk files which are to be assembled into +a flight recording. +.SH DESCRIPTION +The \f[CR]jfr\f[R] command provides a tool for interacting with flight +recorder files (\f[CR].jfr\f[R]). +The main function is to filter, summarize and output flight recording +files into human readable format. +There is also support for scrubbing, merging and splitting recording +files. +.PP +Flight recording files are created and saved as binary formatted files. +Having a tool that can extract the contents from a flight recording and +manipulate the contents and translate them into human readable format +helps developers to debug performance issues with Java applications. +.SS Subcommands +The \f[CR]jfr\f[R] command has several subcommands: +.IP \(bu 2 +\f[CR]print\f[R] +.IP \(bu 2 +\f[CR]view\f[R] +.IP \(bu 2 +\f[CR]configure\f[R] +.IP \(bu 2 +\f[CR]metadata\f[R] +.IP \(bu 2 +\f[CR]summary\f[R] +.IP \(bu 2 +\f[CR]scrub\f[R] +.IP \(bu 2 +\f[CR]assemble\f[R] +.IP \(bu 2 +\f[CR]disassemble\f[R] +.SS \f[CR]jfr print\f[R] subcommand +Use \f[CR]jfr print\f[R] to print the contents of a flight recording +file to standard out. +.PP +The syntax is: +.PP +\f[CR]jfr print\f[R] +[\f[CR]\-\-xml\f[R]|\f[CR]\-\-json\f[R]|\f[CR]\-\-exact\f[R]] +[\f[CR]\-\-categories\f[R] <\f[I]filters\f[R]>] [\f[CR]\-\-events\f[R] +<\f[I]filters\f[R]>] [\f[CR]\-\-stack\-depth\f[R] <\f[I]depth\f[R]>] +<\f[I]file\f[R]> +.PP +where: +.TP +\f[CR]\-\-xml\f[R] +Print the recording in XML format. +.TP +\f[CR]\-\-json\f[R] +Print the recording in JSON format. +.TP +\f[CR]\-\-exact\f[R] +Pretty\-print numbers and timestamps with full precision. +.TP +\f[CR]\-\-categories\f[R] <\f[I]filters\f[R]> +Select events matching a category name. +The filter is a comma\-separated list of names, simple and/or qualified, +and/or quoted glob patterns. +.TP +\f[CR]\-\-events\f[R] <\f[I]filters\f[R]> +Select events matching an event name. +The filter is a comma\-separated list of names, simple and/or qualified, +and/or quoted glob patterns. +.TP +\f[CR]\-\-stack\-depth\f[R] <\f[I]depth\f[R]> +Number of frames in stack traces, by default 5. +.TP +<\f[I]file\f[R]> +Location of the recording file (\f[CR].jfr\f[R]) +.PP +The default format for printing the contents of the flight recording +file is human readable form unless either \f[CR]xml\f[R] or +\f[CR]json\f[R] is specified. +These options provide machine\-readable output that can be further +parsed or processed by user created scripts. +.PP +Use \f[CR]jfr \-\-help print\f[R] to see example usage of filters. +.PP +To reduce the amount of data displayed, it is possible to filter out +events or categories of events. +The filter operates on the symbolic name of an event, set by using the +\f[CR]\(atName\f[R] annotation, or the category name, set by using the +\f[CR]\(atCategory\f[R] annotation. +If multiple filters are used, events from both filters will be included. +If no filter is used, all the events will be printed. +If a combination of a category filter and event filter is used, the +selected events will be the union of the two filters. +.PP +For example, to show all GC events and the CPULoad event, the following +command could be used: +.PP +\f[CR]jfr print \-\-categories GC \-\-events CPULoad recording.jfr\f[R] +.PP +Event values are formatted according to the content types that are being +used. +For example, a field with the \f[CR]jdk.jfr.Percentage\f[R] annotation +that has the value 0.52 is formatted as 52%. +.PP +Stack traces are by default truncated to 5 frames, but the number can be +increased/decreased using the \f[CR]\-\-stack\-depth\f[R] command\-line +option. +.SS \f[CR]jfr view\f[R] subcommand +Use \f[CR]jfr view\f[R] to aggregate and display event data on standard +out. +.PP +The syntax is: +.PP +\f[CR]jfr view\f[R] [\f[CR]\-\-verbose\f[R]] [\f[CR]\-\-width\f[R] +<\f[I]integer\f[R]>] [\f[CR]\-\-truncate\f[R] <\f[I]mode\f[R]>] +[\f[CR]\-\-cell\-height\f[R] <\f[I]integer\f[R]>] <\f[I]view\f[R]> +<\f[I]file\f[R]> +.PP +where: +.TP +\f[CR]\-\-verbose\f[R] +Displays the query that makes up the view. +.TP +\f[CR]\-\-width\f[R] <\f[I]integer\f[R]> +The width of the view in characters. +Default value depends on the view. +.TP +\f[CR]\-\-truncate\f[R] <\f[I]mode\f[R]> +How to truncate content that exceeds space in a table cell. +Mode can be \(aqbeginning\(aq or \(aqend\(aq. +Default value is \(aqend\(aq. +.TP +\f[CR]\-\-cell\-height\f[R] <\f[I]integer\f[R]> +Maximum number of rows in a table cell. +Default value depends on the view. +.TP +<\f[I]view\f[R]> +Name of the view or event type to display. +Use \f[CR]jfr \-\-help view\f[R] to see a list of available views. +.TP +<\f[I]file\f[R]> +Location of the recording file (.jfr) +.PP +The <\f[I]view\f[R]> parameter can be an event type name. +Use the \f[CR]jfr view types <file>\f[R] to see a list. +To display all views, use \f[CR]jfr view all\-views <file>\f[R]. +To display all events, use \f[CR]jfr view all\-events <file>\f[R]. +.SS \f[CR]jfr configure\f[R] subcommand +Use \f[CR]jfr configure\f[R] to configure a .jfc settings file. +.PP +The syntax is: +.PP +\f[CR]jfr configure\f[R] [\-\-interactive] [\-\-verbose] [\-\-input +<files>] [\-\-output <file>] [option=value]* [event\-setting=value]* +.TP +\f[CR]\-\-interactive\f[R] +Interactive mode where the configuration is determined by a set of +questions. +.TP +\f[CR]\-\-verbose\f[R] +Displays the modified settings. +.TP +\f[CR]\-\-input\f[R] <\f[I]files\f[R]> +A comma\-separated list of .jfc files from which the new configuration +is based. +If no file is specified, the default file in the JDK is used +(default.jfc). +If \(aqnone\(aq is specified, the new configuration starts empty. +.TP +\f[CR]\-\-output\f[R] <\f[I]file\f[R]> +The filename of the generated output file. +If not specified, the filename custom.jfc will be used. +.TP +\f[I]option=value\f[R] +The option value to modify. +To see available options, use \f[CR]jfr help configure\f[R] +.TP +\f[I]event\-setting=value\f[R] +The event setting value to modify. +Use the form: +<\f[I]event\-name\f[R]>#<\f[I]setting\-name\f[R]>=<\f[I]value\f[R]> To +add a new event setting, prefix the event name with \(aq+\(aq. +.PP +The whitespace delimiter can be omitted for timespan values, i.e. +20ms. +For more information about the settings syntax, see Javadoc of the +jdk.jfr package. +.SS \f[CR]jfr metadata\f[R] subcommand +Use \f[CR]jfr metadata\f[R] to display information about events, such as +event names, categories and field layout within a flight recording file. +.PP +The syntax is: +.PP +\f[CR]jfr metadata\f[R] [\-\-categories <filter>] [\-\-events <filter>] +[<file>] +.TP +\f[CR]\-\-categories\f[R] <\f[I]filter\f[R]> +Select events matching a category name. +The filter is a comma\-separated list of names, simple and/or qualified, +and/or quoted glob patterns. +.TP +\f[CR]\-\-events\f[R] <\f[I]filter\f[R]> +Select events matching an event name. +The filter is a comma\-separated list of names, simple and/or qualified, +and/or quoted glob patterns. +.TP +<\f[I]file\f[R]> +Location of the recording file (.jfr) +.PP +If the <file> parameter is omitted, metadata from the JDK where the +\(aqjfr\(aq tool is located will be used. +.SS \f[CR]jfr summary\f[R] subcommand +Use \f[CR]jfr summary\f[R] to print statistics for a recording. +For example, a summary can illustrate the number of recorded events and +how much disk space they used. +This is useful for troubleshooting and understanding the impact of event +settings. +.PP +The syntax is: +.PP +\f[CR]jfr summary\f[R] <\f[I]file\f[R]> +.PP +where: +.TP +<\f[I]file\f[R]> +Location of the flight recording file (\f[CR].jfr\f[R]) +.SS \f[CR]jfr scrub\f[R] subcommand +Use \f[CR]jfr scrub\f[R] to remove sensitive contents from a file or to +reduce its size. +.PP +The syntax is: +.PP +\f[CR]jfr scrub\f[R] [\-\-include\-events <\f[I]filter\f[R]>] +[\-\-exclude\-events <\f[I]filter\f[R]>] [\-\-include\-categories +<\f[I]filter\f[R]>] [\-\-exclude\-categories <\f[I]filter\f[R]>] +[\-\-include\-threads <\f[I]filter\f[R]>] [\-\-exclude\-threads +<\f[I]filter\f[R]>] <\f[I]input\-file\f[R]> [<\f[I]output\-file\f[R]>] +.TP +\f[CR]\-\-include\-events\f[R] <\f[I]filter\f[R]> +Select events matching an event name. +.TP +\f[CR]\-\-exclude\-events\f[R] <\f[I]filter\f[R]> +Exclude events matching an event name. +.TP +\f[CR]\-\-include\-categories\f[R] <\f[I]filter\f[R]> +Select events matching a category name. +.TP +\f[CR]\-\-exclude\-categories\f[R] <\f[I]filter\f[R]> +Exclude events matching a category name. +.TP +\f[CR]\-\-include\-threads\f[R] <\f[I]filter\f[R]> +Select events matching a thread name. +.TP +\f[CR]\-\-exclude\-threads\f[R] <\f[I]filter\f[R]> +Exclude events matching a thread name. +.TP +<\f[I]input\-file\f[R]> +The input file to read events from. +.TP +<\f[I]output\-file\f[R]> +The output file to write filter events to. +If no file is specified, it will be written to the same path as the +input file, but with \(dq\-scrubbed\(dq appended to the filename. +.PP +The filter is a comma\-separated list of names, simple and/or qualified, +and/or quoted glob patterns. +If multiple filters are used, they are applied in the specified order. +.SS \f[CR]jfr assemble\f[R] subcommand +Use jfr \f[CR]assemble\f[R] to assemble chunk files into a recording +file. +.PP +The syntax is: +.PP +\f[CR]jfr assemble\f[R] <\f[I]repository\f[R]> <\f[I]file\f[R]> +.PP +where: +.TP +<\f[I]repository\f[R]> +Directory where the repository containing chunk files is located. +.TP +<\f[I]file\f[R]> +Location of the flight recording file (\f[CR].jfr\f[R]). +.PP +Flight recording information is written in chunks. +A chunk contains all of the information necessary for parsing. +A chunk typically contains events useful for troubleshooting. +If a JVM should crash, these chunks can be recovered and used to create +a flight recording file using this \f[CR]jfr assemble\f[R] command. +These chunk files are concatenated in chronological order and chunk +files that are not finished (.part) are excluded. +.SS \f[CR]jfr disassemble\f[R] subcommand +Use \f[CR]jfr disassemble\f[R] to decompose a flight recording file into +its chunk file pieces. +.PP +The syntax is: +.PP +\f[CR]jfr disassemble\f[R] [\f[CR]\-\-max\-chunks\f[R] +<\f[I]chunks\f[R]>] [\f[CR]\-\-output\f[R] <\f[I]directory\f[R]>] +<\f[I]file\f[R]> +.PP +where: +.TP +\f[CR]\-\-output\f[R] <\f[I]directory\f[R]> +The location to write the disassembled file, by default the current +directory +.TP +\f[CR]\-\-max\-chunks\f[R] <\f[I]chunks\f[R]> +Maximum number of chunks per file, by default 5. +The chunk size varies, but is typically around 15 MB. +.TP +\f[CR]\-\-max\-size\f[R] <\f[I]size\f[R]> +Maximum number of bytes per file. +.TP +<\f[I]file\f[R]> +Location of the flight recording file (\f[CR].jfr\f[R]) +.PP +This function can be useful for repairing a broken file by removing the +faulty chunk. +It can also be used to reduce the size of a file that is too large to +transfer. +The resulting chunk files are named \f[CR]myfile_1.jfr\f[R], +\f[CR]myfile_2.jfr\f[R], etc. +If needed, the resulting file names will be padded with zeros to +preserve chronological order. +For example, the chunk file name is \f[CR]myfile_001.jfr\f[R] if the +recording consists of more than 100 chunks. +.SS jfr version and help subcommands +Use \f[CR]jfr \-\-version\f[R] or \f[CR]jfr version\f[R] to view the +version string information for this jfr command. +.PP +To get help on any of the jfr subcommands, use: +.PP +\f[CR]jfr <\-\-help|help>\f[R] [\f[I]subcommand\f[R]] +.PP +where: +.PP +[\f[I]subcommand\f[R]] is any of: +.IP \(bu 2 +\f[CR]print\f[R] +.IP \(bu 2 +\f[CR]view\f[R] +.IP \(bu 2 +\f[CR]configure\f[R] +.IP \(bu 2 +\f[CR]metadata\f[R] +.IP \(bu 2 +\f[CR]summary\f[R] +.IP \(bu 2 +\f[CR]scrub\f[R] +.IP \(bu 2 +\f[CR]assemble\f[R] +.IP \(bu 2 +\f[CR]disassemble\f[R] diff --git a/man/jhsdb.1 b/man/jhsdb.1 new file mode 100644 index 000000000..dee0f3c67 --- /dev/null +++ b/man/jhsdb.1 @@ -0,0 +1,179 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JHSDB" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jhsdb \- attach to a Java process or launch a postmortem debugger to +analyze the content of a core dump from a crashed Java Virtual Machine +(JVM) +.SH SYNOPSIS +\f[B]WARNING:\f[R] The \f[CR]debugd\f[R] subcommand and +\f[CR]\-\-connect\f[R] options are deprecated. +They will be removed in a future release. +.PP +\f[CR]jhsdb\f[R] \f[CR]clhsdb\f[R] [\f[CR]\-\-pid\f[R] \f[I]pid\f[R] | +\f[CR]\-\-exe\f[R] \f[I]executable\f[R] \f[CR]\-\-core\f[R] +\f[I]coredump\f[R]] +.PP +\f[CR]jhsdb\f[R] \f[CR]hsdb\f[R] [\f[CR]\-\-pid\f[R] \f[I]pid\f[R] | +\f[CR]\-\-exe\f[R] \f[I]executable\f[R] \f[CR]\-\-core\f[R] +\f[I]coredump\f[R]] +.PP +\f[CR]jhsdb\f[R] \f[CR]debugd\f[R] (\f[CR]\-\-pid\f[R] \f[I]pid\f[R] | +\f[CR]\-\-exe\f[R] \f[I]executable\f[R] \f[CR]\-\-core\f[R] +\f[I]coredump\f[R]) [\f[I]options\f[R]] +.PP +\f[CR]jhsdb\f[R] \f[CR]jstack\f[R] (\f[CR]\-\-pid\f[R] \f[I]pid\f[R] | +\f[CR]\-\-exe\f[R] \f[I]executable\f[R] \f[CR]\-\-core\f[R] +\f[I]coredump\f[R] | \f[CR]\-\-connect\f[R] +\f[I][server\-id\(at]debugd\-host\f[R]) [\f[I]options\f[R]] +.PP +\f[CR]jhsdb\f[R] \f[CR]jmap\f[R] (\f[CR]\-\-pid\f[R] \f[I]pid\f[R] | +\f[CR]\-\-exe\f[R] \f[I]executable\f[R] \f[CR]\-\-core\f[R] +\f[I]coredump\f[R] | \f[CR]\-\-connect\f[R] +\f[I][server\-id\(at]debugd\-host\f[R]) [\f[I]options\f[R]] +.PP +\f[CR]jhsdb\f[R] \f[CR]jinfo\f[R] (\f[CR]\-\-pid\f[R] \f[I]pid\f[R] | +\f[CR]\-\-exe\f[R] \f[I]executable\f[R] \f[CR]\-\-core\f[R] +\f[I]coredump\f[R] | \f[CR]\-\-connect\f[R] +\f[I][server\-id\(at]debugd\-host\f[R]) [\f[I]options\f[R]] +.PP +\f[CR]jhsdb\f[R] \f[CR]jsnap\f[R] (\f[CR]\-\-pid\f[R] \f[I]pid\f[R] | +\f[CR]\-\-exe\f[R] \f[I]executable\f[R] \f[CR]\-\-core\f[R] +\f[I]coredump\f[R] | \f[CR]\-\-connect\f[R] +\f[I][server\-id\(at]debugd\-host\f[R]) [\f[I]options\f[R]] +.TP +\f[I]pid\f[R] +The process ID to which the \f[CR]jhsdb\f[R] tool should attach. +The process must be a Java process. +To get a list of Java processes running on a machine, use the +\f[CR]ps\f[R] command or, if the JVM processes are not running in a +separate docker instance, the \f[B]jps\f[R] command. +.TP +\f[I]executable\f[R] +The Java executable file from which the core dump was produced. +.TP +\f[I]coredump\f[R] +The core file to which the \f[CR]jhsdb\f[R] tool should attach. +.TP +\f[I][server\-id\(at]debugd\-host\f[R] +An optional server ID and the address of the remote debug server +(debugd). +.TP +\f[I]options\f[R] +The command\-line options for a \f[CR]jhsdb\f[R] mode. +See \f[B]Options for the debugd Mode\f[R], \f[B]Options for the jstack +Mode\f[R], \f[B]Options for the jmap Mode\f[R], \f[B]Options for the +jinfo Mode\f[R], and \f[B]Options for the jsnap Mode\f[R]. +.PP +\f[B]Note:\f[R] +.PP +Either the \f[I]pid\f[R] or the pair of \f[I]executable\f[R] and +\f[I]core\f[R] files or the \f[I][server\-id\(at]debugd\-host\f[R] must +be provided for \f[CR]debugd\f[R], \f[CR]jstack\f[R], \f[CR]jmap\f[R], +\f[CR]jinfo\f[R] and \f[CR]jsnap\f[R] modes. +.SH DESCRIPTION +You can use the \f[CR]jhsdb\f[R] tool to attach to a Java process or to +launch a postmortem debugger to analyze the content of a core\-dump from +a crashed Java Virtual Machine (JVM). +This command is experimental and unsupported. +.PP +\f[B]Note:\f[R] +.PP +Attaching the \f[CR]jhsdb\f[R] tool to a live process will cause the +process to hang and the process will probably crash when the debugger +detaches. +.PP +The \f[CR]jhsdb\f[R] tool can be launched in any one of the following +modes: +.TP +\f[CR]jhsdb clhsdb\f[R] +Starts the interactive command\-line debugger. +.TP +\f[CR]jhsdb hsdb\f[R] +Starts the interactive GUI debugger. +.TP +\f[CR]jhsdb debugd\f[R] +Starts the remote debug server. +.TP +\f[CR]jhsdb jstack\f[R] +Prints stack and locks information. +.TP +\f[CR]jhsdb jmap\f[R] +Prints heap information. +.TP +\f[CR]jhsdb jinfo\f[R] +Prints basic JVM information. +.TP +\f[CR]jhsdb jsnap\f[R] +Prints performance counter information. +.TP +\f[CR]jhsdb\f[R] \f[I]command\f[R] \f[CR]\-\-help\f[R] +Displays the options available for the \f[I]command\f[R]. +.SH OPTIONS FOR THE DEBUGD MODE +.TP +\f[CR]\-\-serverid\f[R] \f[I]server\-id\f[R] +An optional unique ID for this debug server. +This is required if multiple debug servers are run on the same machine. +.TP +\f[CR]\-\-rmiport\f[R] \f[I]port\f[R] +Sets the port number to which the RMI connector is bound. +If not specified a random available port is used. +.TP +\f[CR]\-\-registryport\f[R] \f[I]port\f[R] +Sets the RMI registry port. +This option overrides the system property +\(aqsun.jvm.hotspot.rmi.port\(aq. +If not specified, the system property is used. +If the system property is not set, the default port 1099 is used. +.TP +\f[CR]\-\-hostname\f[R] \f[I]hostname\f[R] +Sets the hostname the RMI connector is bound. +The value could be a hostname or an IPv4/IPv6 address. +This option overrides the system property +\(aqjava.rmi.server.hostname\(aq. +If not specified, the system property is used. +If the system property is not set, a system hostname is used. +.SH OPTIONS FOR THE JINFO MODE +.TP +\f[CR]\-\-flags\f[R] +Prints the VM flags. +.TP +\f[CR]\-\-sysprops\f[R] +Prints the Java system properties. +.TP +no option +Prints the VM flags and the Java system properties. +.SH OPTIONS FOR THE JMAP MODE +.TP +no option +Prints the same information as Solaris \f[CR]pmap\f[R]. +.TP +\f[CR]\-\-heap\f[R] +Prints the \f[CR]java\f[R] heap summary. +.TP +\f[CR]\-\-binaryheap\f[R] +Dumps the \f[CR]java\f[R] heap in \f[CR]hprof\f[R] binary format. +.TP +\f[CR]\-\-dumpfile\f[R] \f[I]name\f[R] +The name of the dumpfile. +.TP +\f[CR]\-\-histo\f[R] +Prints the histogram of \f[CR]java\f[R] object heap. +.TP +\f[CR]\-\-clstats\f[R] +Prints the class loader statistics. +.TP +\f[CR]\-\-finalizerinfo\f[R] +Prints the information on objects awaiting finalization. +.SH OPTIONS FOR THE JSTACK MODE +.TP +\f[CR]\-\-locks\f[R] +Prints the \f[CR]java.util.concurrent\f[R] locks information. +.TP +\f[CR]\-\-mixed\f[R] +Attempts to print both \f[CR]java\f[R] and native frames if the platform +allows it. +.SH OPTIONS FOR THE JSNAP MODE +.TP +\f[CR]\-\-all\f[R] +Prints all performance counters. diff --git a/man/jinfo.1 b/man/jinfo.1 new file mode 100644 index 000000000..9f92c4a7e --- /dev/null +++ b/man/jinfo.1 @@ -0,0 +1,63 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JINFO" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jinfo \- generate Java configuration information for a specified Java +process +.SH SYNOPSIS +\f[B]Note:\f[R] This command is experimental and unsupported. +.PP +\f[CR]jinfo\f[R] [\f[I]option\f[R]] \f[I]pid\f[R] +.TP +\f[I]option\f[R] +This represents the \f[CR]jinfo\f[R] command\-line options. +See \f[B]Options for the jinfo Command\f[R]. +.TP +\f[I]pid\f[R] +The process ID for which the configuration information is to be printed. +The process must be a Java process. +To get a list of Java processes running on a machine, use either the +\f[CR]ps\f[R] command or, if the JVM processes are not running in a +separate docker instance, the \f[B]jps\f[R] command. +.SH DESCRIPTION +The \f[CR]jinfo\f[R] command prints Java configuration information for a +specified Java process. +The configuration information includes Java system properties and JVM +command\-line flags. +If the specified process is running on a 64\-bit JVM, then you might +need to specify the \f[CR]\-J\-d64\f[R] option, for example: +.RS +.PP +\f[CR]jinfo \-J\-d64 \-sysprops\f[R] \f[I]pid\f[R] +.RE +.PP +This command is unsupported and might not be available in future +releases of the JDK. +In Windows Systems where \f[CR]dbgeng.dll\f[R] is not present, the +Debugging Tools for Windows must be installed to have these tools work. +The \f[CR]PATH\f[R] environment variable should contain the location of +the \f[CR]jvm.dll\f[R] that\(aqs used by the target process or the +location from which the core dump file was produced. +.SH OPTIONS FOR THE JINFO COMMAND +\f[B]Note:\f[R] +.PP +If none of the following options are used, both the command\-line flags +and the system property name\-value pairs are printed. +.TP +\f[CR]\-flag\f[R] \f[I]name\f[R] +Prints the name and value of the specified command\-line flag. +.TP +\f[CR]\-flag\f[R] [\f[CR]+\f[R]|\f[CR]\-\f[R]]\f[I]name\f[R] +Enables or disables the specified Boolean command\-line flag. +.TP +\f[CR]\-flag\f[R] \f[I]name\f[R]\f[CR]=\f[R]\f[I]value\f[R] +Sets the specified command\-line flag to the specified value. +.TP +\f[CR]\-flags\f[R] +Prints command\-line flags passed to the JVM. +.TP +\f[CR]\-sysprops\f[R] +Prints Java system properties as name\-value pairs. +.TP +\f[CR]\-h\f[R] or \f[CR]\-help\f[R] +Prints a help message. diff --git a/man/jlink.1 b/man/jlink.1 new file mode 100644 index 000000000..da6f1e45b --- /dev/null +++ b/man/jlink.1 @@ -0,0 +1,344 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JLINK" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jlink \- assemble and optimize a set of modules and their dependencies +into a custom runtime image +.SH SYNOPSIS +\f[CR]jlink\f[R] [\f[I]options\f[R]] \f[CR]\-\-module\-path\f[R] +\f[I]modulepath\f[R] \f[CR]\-\-add\-modules\f[R] +\f[I]module\f[R][,\f[I]module\f[R]...] +.TP +\f[I]options\f[R] +Command\-line options separated by spaces. +See \f[B]jlink Options\f[R]. +.TP +\f[I]modulepath\f[R] +The path where the \f[CR]jlink\f[R] tool discovers observable modules. +These modules can be modular JAR files, JMOD files, or exploded modules. +.TP +\f[I]module\f[R] +The names of the modules to add to the runtime image. +The \f[CR]jlink\f[R] tool adds these modules and their transitive +dependencies. +.SH DESCRIPTION +The \f[CR]jlink\f[R] tool links a set of modules, along with their +transitive dependences, to create a custom runtime image. +.PP +\f[B]Note:\f[R] +.PP +Developers are responsible for updating their custom runtime images. +.SH JLINK OPTIONS +.TP +\f[CR]\-\-add\-modules\f[R] \f[I]mod\f[R][\f[CR],\f[R]\f[I]mod\f[R]...] +Adds the named modules, \f[I]mod\f[R], to the default set of root +modules. +The default set of root modules is empty. +.TP +\f[CR]\-\-bind\-services\f[R] +Link service provider modules and their dependencies. +.TP +\f[CR]\-c ={0|1|2}\f[R] or \f[CR]\-\-compress={0|1|2}\f[R] +Enable compression of resources: +.RS +.IP \(bu 2 +\f[CR]0\f[R]: No compression +.IP \(bu 2 +\f[CR]1\f[R]: Constant string sharing +.IP \(bu 2 +\f[CR]2\f[R]: ZIP +.RE +.TP +\f[CR]\-\-disable\-plugin\f[R] \f[I]pluginname\f[R] +Disables the specified plug\-in. +See \f[B]jlink Plug\-ins\f[R] for the list of supported plug\-ins. +.TP +\f[CR]\-\-endian\f[R] {\f[CR]little\f[R]|\f[CR]big\f[R]} +Specifies the byte order of the generated image. +The default value is the format of your system\(aqs architecture. +.TP +\f[CR]\-h\f[R] or \f[CR]\-\-help\f[R] +Prints the help message. +.TP +\f[CR]\-\-ignore\-signing\-information\f[R] +Suppresses a fatal error when signed modular JARs are linked in the +runtime image. +The signature\-related files of the signed modular JARs aren\(aqt copied +to the runtime image. +.TP +\f[CR]\-\-launcher\f[R] \f[I]command\f[R]\f[CR]=\f[R]\f[I]module\f[R] or \f[CR]\-\-launcher\f[R] \f[I]command\f[R]\f[CR]=\f[R]\f[I]module\f[R]\f[CR]/\f[R]\f[I]main\f[R] +Specifies the launcher command name for the module or the command name +for the module and main class (the module and the main class names are +separated by a slash (\f[CR]/\f[R])). +.TP +\f[CR]\-\-limit\-modules\f[R] \f[I]mod\f[R][\f[CR],\f[R]\f[I]mod\f[R]...] +Limits the universe of observable modules to those in the transitive +closure of the named modules, \f[CR]mod\f[R], plus the main module, if +any, plus any further modules specified in the +\f[CR]\-\-add\-modules\f[R] option. +.TP +\f[CR]\-\-list\-plugins\f[R] +Lists available plug\-ins, which you can access through command\-line +options; see \f[B]jlink Plug\-ins\f[R]. +.TP +\f[CR]\-p\f[R] or \f[CR]\-\-module\-path\f[R] \f[I]modulepath\f[R] +Specifies the module path. +.RS +If this option is not specified, then the default module path is +\f[CR]$JAVA_HOME/jmods\f[R]. +This directory contains the \f[CR]java.base\f[R] module and the other +standard and JDK modules. +If this option is specified but the \f[CR]java.base\f[R] module cannot +be resolved from it, then the \f[CR]jlink\f[R] command appends +\f[CR]$JAVA_HOME/jmods\f[R] to the module path. +.RE +.TP +\f[CR]\-\-no\-header\-files\f[R] +Excludes header files. +.TP +\f[CR]\-\-no\-man\-pages\f[R] +Excludes man pages. +.TP +\f[CR]\-\-output\f[R] \f[I]path\f[R] +Specifies the location of the generated runtime image. +.TP +\f[CR]\-\-save\-opts\f[R] \f[I]filename\f[R] +Saves \f[CR]jlink\f[R] options in the specified file. +.TP +\f[CR]\-\-suggest\-providers\f[R] [\f[I]name\f[R]\f[CR],\f[R] ...] +Suggest providers that implement the given service types from the module +path. +.TP +\f[CR]\-\-version\f[R] +Prints version information. +.TP +\f[CR]\(at\f[R]\f[I]filename\f[R] +Reads options from the specified file. +.RS +An options file is a text file that contains the options and values that +you would typically enter in a command prompt. +Options may appear on one line or on several lines. +You may not specify environment variables for path names. +You may comment out lines by prefixing a hash symbol (\f[CR]#\f[R]) to +the beginning of the line. +The following is an example of an options file for the \f[CR]jlink\f[R] +command: +.IP +.EX +#Wed Dec 07 00:40:19 EST 2016 +\-\-module\-path mlib +\-\-add\-modules com.greetings +\-\-output greetingsapp +.EE +.RE +.SH JLINK PLUG\-INS +\f[B]Note:\f[R] +.PP +Plug\-ins not listed in this section aren\(aqt supported and are subject +to change. +.PP +For plug\-in options that require a \f[I]pattern\-list\f[R], the value +is a comma\-separated list of elements, with each element using one the +following forms: +.IP \(bu 2 +\f[I]glob\-pattern\f[R] +.IP \(bu 2 +\f[CR]glob:\f[R]\f[I]glob\-pattern\f[R] +.IP \(bu 2 +\f[CR]regex:\f[R]\f[I]regex\-pattern\f[R] +.IP \(bu 2 +\f[CR]\(at\f[R]\f[I]filename\f[R] +.RS 2 +.IP \(bu 2 +\f[I]filename\f[R] is the name of a file that contains patterns to be +used, one pattern per line. +.RE +.PP +For a complete list of all available plug\-ins, run the command +\f[CR]jlink \-\-list\-plugins\f[R]. +.SS Plugin \f[CR]compress\f[R] +.TP +Options +\f[CR]\-\-compress=\f[R]{\f[CR]0\f[R]|\f[CR]1\f[R]|\f[CR]2\f[R]}[\f[CR]:filter=\f[R]\f[I]pattern\-list\f[R]] +.TP +Description +Compresses all resources in the output image. +.RS +.IP \(bu 2 +Level 0: No compression +.IP \(bu 2 +Level 1: Constant string sharing +.IP \(bu 2 +Level 2: ZIP +An optional \f[I]pattern\-list\f[R] filter can be specified to list the +pattern of files to include. +.RE +.SS Plugin \f[CR]include\-locales\f[R] +.TP +Options +\f[CR]\-\-include\-locales=\f[R]\f[I]langtag\f[R][\f[CR],\f[R]\f[I]langtag\f[R]]* +.TP +Description +Includes the list of locales where \f[I]langtag\f[R] is a BCP 47 +language tag. +This option supports locale matching as defined in RFC 4647. +Ensure that you add the module jdk.localedata when using this option. +.RS +Example: +.RS +.PP +\f[CR]\-\-add\-modules jdk.localedata \-\-include\-locales=en,ja,*\-IN\f[R] +.RE +.RE +.SS Plugin \f[CR]order\-resources\f[R] +.TP +Options +\f[CR]\-\-order\-resources=\f[R]\f[I]pattern\-list\f[R] +.TP +Description +Orders the specified paths in priority order. +If \f[CR]\(at\f[R]\f[I]filename\f[R] is specified, then each line in +\f[I]pattern\-list\f[R] must be an exact match for the paths to be +ordered. +.RS +Example: +.RS +.PP +\f[CR]\-\-order\-resources=/module\-info.class,\(atclasslist,/java.base/java/lang/\f[R] +.RE +.RE +.SS Plugin \f[CR]strip\-debug\f[R] +.TP +Options +\f[CR]\-\-strip\-debug\f[R] +.TP +Description +Strips debug information from the output image. +.SS Plugin \f[CR]generate\-cds\-archive\f[R] +.TP +Options +\f[CR]\-\-generate\-cds\-archive\f[R] +.TP +Description +Generate CDS archive if the runtime image supports the CDS feature. +.SH JLINK EXAMPLES +The following command creates a runtime image in the directory +\f[CR]greetingsapp\f[R]. +This command links the module \f[CR]com.greetings\f[R], whose module +definition is contained in the directory \f[CR]mlib\f[R]. +.IP +.EX +jlink \-\-module\-path mlib \-\-add\-modules com.greetings \-\-output greetingsapp +.EE +.PP +The following command lists the modules in the runtime image +\f[CR]greetingsapp\f[R]: +.IP +.EX +greetingsapp/bin/java \-\-list\-modules +com.greetings +java.base\(at11 +java.logging\(at11 +org.astro\(at1.0 +.EE +.PP +The following command creates a runtime image in the directory +compressedrt that\(aqs stripped of debug symbols, uses compression to +reduce space, and includes French language locale information: +.IP +.EX +jlink \-\-add\-modules jdk.localedata \-\-strip\-debug \-\-compress=2 \-\-include\-locales=fr \-\-output compressedrt +.EE +.PP +The following example compares the size of the runtime image +\f[CR]compressedrt\f[R] with \f[CR]fr_rt\f[R], which isn\(aqt stripped +of debug symbols and doesn\(aqt use compression: +.IP +.EX +jlink \-\-add\-modules jdk.localedata \-\-include\-locales=fr \-\-output fr_rt + +du \-sh ./compressedrt ./fr_rt +23M ./compressedrt +36M ./fr_rt +.EE +.PP +The following example lists the providers that implement +\f[CR]java.security.Provider\f[R]: +.IP +.EX +jlink \-\-suggest\-providers java.security.Provider + +Suggested providers: + java.naming provides java.security.Provider used by java.base + java.security.jgss provides java.security.Provider used by java.base + java.security.sasl provides java.security.Provider used by java.base + java.smartcardio provides java.security.Provider used by java.base + java.xml.crypto provides java.security.Provider used by java.base + jdk.crypto.cryptoki provides java.security.Provider used by java.base + jdk.crypto.ec provides java.security.Provider used by java.base + jdk.crypto.mscapi provides java.security.Provider used by java.base + jdk.security.jgss provides java.security.Provider used by java.base +.EE +.PP +The following example creates a custom runtime image named +\f[CR]mybuild\f[R] that includes only \f[CR]java.naming\f[R] and +\f[CR]jdk.crypto.cryptoki\f[R] and their dependencies but no other +providers. +Note that these dependencies must exist in the module path: +.IP +.EX +jlink \-\-add\-modules java.naming,jdk.crypto.cryptoki \-\-output mybuild +.EE +.PP +The following command is similar to the one that creates a runtime image +named \f[CR]greetingsapp\f[R], except that it will link the modules +resolved from root modules with service binding; see the +\f[B]\f[CB]Configuration.resolveAndBind\f[B]\f[R] method. +.IP +.EX +jlink \-\-module\-path mlib \-\-add\-modules com.greetings \-\-output greetingsapp \-\-bind\-services +.EE +.PP +The following command lists the modules in the runtime image +greetingsapp created by this command: +.IP +.EX +greetingsapp/bin/java \-\-list\-modules +com.greetings +java.base\(at11 +java.compiler\(at11 +java.datatransfer\(at11 +java.desktop\(at11 +java.logging\(at11 +java.management\(at11 +java.management.rmi\(at11 +java.naming\(at11 +java.prefs\(at11 +java.rmi\(at11 +java.security.jgss\(at11 +java.security.sasl\(at11 +java.smartcardio\(at11 +java.xml\(at11 +java.xml.crypto\(at11 +jdk.accessibility\(at11 +jdk.charsets\(at11 +jdk.compiler\(at11 +jdk.crypto.cryptoki\(at11 +jdk.crypto.ec\(at11 +jdk.crypto.mscapi\(at11 +jdk.internal.opt\(at11 +jdk.jartool\(at11 +jdk.javadoc\(at11 +jdk.jdeps\(at11 +jdk.jfr\(at11 +jdk.jlink\(at11 +jdk.localedata\(at11 +jdk.management\(at11 +jdk.management.jfr\(at11 +jdk.naming.dns\(at11 +jdk.naming.rmi\(at11 +jdk.security.auth\(at11 +jdk.security.jgss\(at11 +jdk.zipfs\(at11 +org.astro\(at1.0 +.EE diff --git a/man/jmap.1 b/man/jmap.1 new file mode 100644 index 000000000..a86be4c24 --- /dev/null +++ b/man/jmap.1 @@ -0,0 +1,67 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JMAP" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jmap \- print details of a specified process +.SH SYNOPSIS +\f[B]Note:\f[R] This command is experimental and unsupported. +.PP +\f[CR]jmap\f[R] [\f[I]options\f[R]] \f[I]pid\f[R] +.TP +\f[I]options\f[R] +This represents the \f[CR]jmap\f[R] command\-line options. +See \f[B]Options for the jmap Command\f[R]. +.TP +\f[I]pid\f[R] +The process ID for which the information specified by the +\f[I]options\f[R] is to be printed. +The process must be a Java process. +To get a list of Java processes running on a machine, use either the +\f[CR]ps\f[R] command or, if the JVM processes are not running in a +separate docker instance, the \f[B]jps\f[R] command. +.SH DESCRIPTION +The \f[CR]jmap\f[R] command prints details of a specified running +process. +.PP +\f[B]Note:\f[R] +.PP +This command is unsupported and might not be available in future +releases of the JDK. +On Windows Systems where the \f[CR]dbgeng.dll\f[R] file isn\(aqt +present, the Debugging Tools for Windows must be installed to make these +tools work. +The \f[CR]PATH\f[R] environment variable should contain the location of +the \f[CR]jvm.dll\f[R] file that\(aqs used by the target process or the +location from which the core dump file was produced. +.SH OPTIONS FOR THE JMAP COMMAND +.TP +\f[CR]\-clstats\f[R] \f[I]pid\f[R] +Connects to a running process and prints class loader statistics of Java +heap. +.TP +\f[CR]\-finalizerinfo\f[R] \f[I]pid\f[R] +Connects to a running process and prints information on objects awaiting +finalization. +.TP +\f[CR]\-histo\f[R][\f[CR]:live\f[R]] \f[I]pid\f[R] +Connects to a running process and prints a histogram of the Java object +heap. +If the \f[CR]live\f[R] suboption is specified, it then counts only live +objects. +.TP +\f[CR]\-dump:\f[R]\f[I]dump_options\f[R] \f[I]pid\f[R] +Connects to a running process and dumps the Java heap. +The \f[I]dump_options\f[R] include: +.RS +.IP \(bu 2 +\f[CR]live\f[R] \-\-\- When specified, dumps only the live objects; if +not specified, then dumps all objects in the heap. +.IP \(bu 2 +\f[CR]format=b\f[R] \-\-\- Dumps the Java heap in \f[CR]hprof\f[R] +binary format +.IP \(bu 2 +\f[CR]file=\f[R]\f[I]filename\f[R] \-\-\- Dumps the heap to +\f[I]filename\f[R] +Example: \f[CR]jmap \-dump:live,format=b,file=heap.bin\f[R] +\f[I]pid\f[R] +.RE diff --git a/man/jmod.1 b/man/jmod.1 new file mode 100644 index 000000000..e5a76142a --- /dev/null +++ b/man/jmod.1 @@ -0,0 +1,359 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JMOD" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jmod \- create JMOD files and list the content of existing JMOD files +.SH SYNOPSIS +\f[CR]jmod\f[R] +(\f[CR]create\f[R]|\f[CR]extract\f[R]|\f[CR]list\f[R]|\f[CR]describe\f[R]|\f[CR]hash\f[R]) +[\f[I]options\f[R]] \f[I]jmod\-file\f[R] +.PP +Includes the following: +.PP +\f[B]Main operation modes\f[R] +.TP +\f[CR]create\f[R] +Creates a new JMOD archive file. +.TP +\f[CR]extract\f[R] +Extracts all the files from the JMOD archive file. +.TP +\f[CR]list\f[R] +Prints the names of all the entries. +.TP +\f[CR]describe\f[R] +Prints the module details. +.TP +\f[CR]hash\f[R] +Determines leaf modules and records the hashes of the dependencies that +directly and indirectly require them. +.PP +\f[B]Options\f[R] +.TP +\f[I]options\f[R] +See \f[B]Options for jmod\f[R]. +.PP +\f[B]Required\f[R] +.TP +\f[I]jmod\-file\f[R] +Specifies the name of the JMOD file to create or from which to retrieve +information. +.SH DESCRIPTION +\f[B]Note:\f[R] For most development tasks, including deploying modules +on the module path or publishing them to a Maven repository, continue to +package modules in modular JAR files. +The \f[CR]jmod\f[R] tool is intended for modules that have native +libraries or other configuration files or for modules that you intend to +link, with the \f[B]jlink\f[R] tool, to a runtime image. +.PP +The JMOD file format lets you aggregate files other than +\f[CR].class\f[R] files, metadata, and resources. +This format is transportable but not executable, which means that you +can use it during compile time or link time but not at run time. +.PP +Many \f[CR]jmod\f[R] options involve specifying a path whose contents +are copied into the resulting JMOD files. +These options copy all the contents of the specified path, including +subdirectories and their contents, but exclude files whose names match +the pattern specified by the \f[CR]\-\-exclude\f[R] option. +.PP +With the \f[CR]\-\-hash\-modules\f[R] option or the \f[CR]jmod hash\f[R] +command, you can, in each module\(aqs descriptor, record hashes of the +content of the modules that are allowed to depend upon it, thus +\(dqtying\(dq together these modules. +This enables a package to be exported to one or more specifically\-named +modules and to no others through qualified exports. +The runtime verifies if the recorded hash of a module matches the one +resolved at run time; if not, the runtime returns an error. +.SH OPTIONS FOR JMOD +.TP +\f[CR]\-\-class\-path\f[R] \f[I]path\f[R] +Specifies the location of application JAR files or a directory +containing classes to copy into the resulting JMOD file. +.TP +\f[CR]\-\-cmds\f[R] \f[I]path\f[R] +Specifies the location of native commands to copy into the resulting +JMOD file. +.TP +\f[CR]\-\-compress\f[R] \f[I]compress\f[R] +Specifies the compression to use in creating the JMOD file. +The accepted values are \f[CR]zip\-[0\-9]\f[R], where \f[CR]zip\-0\f[R] +provides no compression, and \f[CR]zip\-9\f[R] provides the best +compression. +Default is \f[CR]zip\-6\f[R]. +.TP +\f[CR]\-\-config\f[R] \f[I]path\f[R] +Specifies the location of user\-editable configuration files to copy +into the resulting JMOD file. +.TP +\f[CR]\-\-date\f[R]\f[I]TIMESTAMP\f[R] +The timestamp in ISO\-8601 extended offset date\-time with optional +time\-zone format, to use for the timestamp of the entries, e.g. +\(dq2022\-02\-12T12:30:00\-05:00\(dq. +.TP +\f[CR]\-\-dir\f[R] \f[I]path\f[R] +Specifies the location where \f[CR]jmod\f[R] puts extracted files from +the specified JMOD archive. +.TP +\f[CR]\-\-dry\-run\f[R] +Performs a dry run of hash mode. +It identifies leaf modules and their required modules without recording +any hash values. +.TP +\f[CR]\-\-exclude\f[R] \f[I]pattern\-list\f[R] +Excludes files matching the supplied comma\-separated pattern list, each +element using one the following forms: +.RS +.IP \(bu 2 +\f[I]glob\-pattern\f[R] +.IP \(bu 2 +\f[CR]glob:\f[R]\f[I]glob\-pattern\f[R] +.IP \(bu 2 +\f[CR]regex:\f[R]\f[I]regex\-pattern\f[R] +See the \f[B]\f[CB]FileSystem.getPathMatcher\f[B]\f[R] method for the +syntax of \f[I]glob\-pattern\f[R]. +See the \f[B]\f[CB]Pattern\f[B]\f[R] class for the syntax of +\f[I]regex\-pattern\f[R], which represents a regular expression. +.RE +.TP +\f[CR]\-\-hash\-modules\f[R] \f[I]regex\-pattern\f[R] +Determines the leaf modules and records the hashes of the dependencies +directly and indirectly requiring them, based on the module graph of the +modules matching the given \f[I]regex\-pattern\f[R]. +The hashes are recorded in the JMOD archive file being created, or a +JMOD archive or modular JAR on the module path specified by the +\f[CR]jmod hash\f[R] command. +.TP +\f[CR]\-\-header\-files\f[R] \f[I]path\f[R] +Specifies the location of header files to copy into the resulting JMOD +file. +.TP +\f[CR]\-\-help\f[R] or \f[CR]\-h\f[R] +Prints a usage message. +.TP +\f[CR]\-\-help\-extra\f[R] +Prints help for extra options. +.TP +\f[CR]\-\-legal\-notices\f[R] \f[I]path\f[R] +Specifies the location of legal notices to copy into the resulting JMOD +file. +.TP +\f[CR]\-\-libs\f[R] \f[I]path\f[R] +Specifies location of native libraries to copy into the resulting JMOD +file. +.TP +\f[CR]\-\-main\-class\f[R] \f[I]class\-name\f[R] +Specifies main class to record in the module\-info.class file. +.TP +\f[CR]\-\-man\-pages\f[R] \f[I]path\f[R] +Specifies the location of man pages to copy into the resulting JMOD +file. +.TP +\f[CR]\-\-module\-version\f[R] \f[I]module\-version\f[R] +Specifies the module version to record in the module\-info.class file. +.TP +\f[CR]\-\-module\-path\f[R] \f[I]path\f[R] or \f[CR]\-p\f[R] \f[I]path\f[R] +Specifies the module path. +This option is required if you also specify +\f[CR]\-\-hash\-modules\f[R]. +.TP +\f[CR]\-\-target\-platform\f[R] \f[I]platform\f[R] +Specifies the target platform. +.TP +\f[CR]\-\-version\f[R] +Prints version information of the \f[CR]jmod\f[R] tool. +.TP +\f[CR]\(at\f[R]\f[I]filename\f[R] +Reads options from the specified file. +.RS +An options file is a text file that contains the options and values that +you would ordinarily enter in a command prompt. +Options may appear on one line or on several lines. +You may not specify environment variables for path names. +You may comment out lines by prefixinga hash symbol (\f[CR]#\f[R]) to +the beginning of the line. +The following is an example of an options file for the \f[CR]jmod\f[R] +command: +.IP +.EX +#Wed Dec 07 00:40:19 EST 2016 +create \-\-class\-path mods/com.greetings \-\-module\-path mlib + \-\-cmds commands \-\-config configfiles \-\-header\-files src/h + \-\-libs lib \-\-main\-class com.greetings.Main + \-\-man\-pages man \-\-module\-version 1.0 + \-\-os\-arch \(dqx86_x64\(dq \-\-os\-name \(dqmacOS\(dq + \-\-os\-version \(dq10.10.5\(dq greetingsmod +.EE +.RE +.SH EXTRA OPTIONS FOR JMOD +In addition to the options described in \f[B]Options for jmod\f[R], the +following are extra options that can be used with the command. +.TP +\f[CR]\-\-do\-not\-resolve\-by\-default\f[R] +Exclude from the default root set of modules +.TP +\f[CR]\-\-warn\-if\-resolved\f[R] +Hint for a tool to issue a warning if the module is resolved. +One of deprecated, deprecated\-for\-removal, or incubating. +.SH JMOD CREATE EXAMPLE +The following is an example of creating a JMOD file: +.IP +.EX +jmod create \-\-class\-path mods/com.greetings \-\-cmds commands + \-\-config configfiles \-\-header\-files src/h \-\-libs lib + \-\-main\-class com.greetings.Main \-\-man\-pages man \-\-module\-version 1.0 + \-\-os\-arch \(dqx86_x64\(dq \-\-os\-name \(dqmacOS\(dq + \-\-os\-version \(dq10.10.5\(dq greetingsmod +.EE +.PP +Create a JMOD file specifying the date for the entries as +\f[CR]2022 March 15 00:00:00\f[R]: +.IP +.EX +jmod create \-\-class\-path build/foo/classes \-\-date 2022\-03\-15T00:00:00Z + jmods/foo1.jmod +.EE +.SH JMOD HASH EXAMPLE +The following example demonstrates what happens when you try to link a +leaf module (in this example, \f[CR]ma\f[R]) with a required module +(\f[CR]mb\f[R]), and the hash value recorded in the required module +doesn\(aqt match that of the leaf module. +.IP "1." 3 +Create and compile the following \f[CR].java\f[R] files: +.RS 4 +.IP \(bu 2 +\f[CR]jmodhashex/src/ma/module\-info.java\f[R] +.RS 2 +.IP +.EX +module ma { + requires mb; +} +.EE +.RE +.IP \(bu 2 +\f[CR]jmodhashex/src/mb/module\-info.java\f[R] +.RS 2 +.IP +.EX +module mb { +} +.EE +.RE +.IP \(bu 2 +\f[CR]jmodhashex2/src/ma/module\-info.java\f[R] +.RS 2 +.IP +.EX +module ma { + requires mb; +} +.EE +.RE +.IP \(bu 2 +\f[CR]jmodhashex2/src/mb/module\-info.java\f[R] +.RS 2 +.IP +.EX +module mb { +} +.EE +.RE +.RE +.IP "2." 3 +Create a JMOD archive for each module. +Create the directories \f[CR]jmodhashex/jmods\f[R] and +\f[CR]jmodhashex2/jmods\f[R], and then run the following commands from +the \f[CR]jmodhashex\f[R] directory, then from the +\f[CR]jmodhashex2\f[R] directory: +.RS 4 +.IP \(bu 2 +\f[CR]jmod create \-\-class\-path mods/ma jmods/ma.jmod\f[R] +.IP \(bu 2 +\f[CR]jmod create \-\-class\-path mods/mb jmods/mb.jmod\f[R] +.RE +.IP "3." 3 +Optionally preview the \f[CR]jmod hash\f[R] command. +Run the following command from the \f[CR]jmodhashex\f[R] directory: +.RS 4 +.PP +\f[CR]jmod hash \-\-dry\-run \-module\-path jmods \-\-hash\-modules .*\f[R] +.PP +The command prints the following: +.IP +.EX +Dry run: +mb + hashes ma SHA\-256 07667d5032004b37b42ec2bb81b46df380cf29e66962a16481ace2e71e74073a +.EE +.PP +This indicates that the \f[CR]jmod hash\f[R] command (without the +\f[CR]\-\-dry\-run\f[R] option) will record the hash value of the leaf +module \f[CR]ma\f[R] in the module \f[CR]mb\f[R]. +.RE +.IP "4." 3 +Record hash values in the JMOD archive files contained in the +\f[CR]jmodhashex\f[R] directory. +Run the following command from the \f[CR]jmodhashex\f[R] directory: +.RS 4 +.RS +.PP +\f[CR]jmod hash \-\-module\-path jmods \-\-hash\-modules .*\f[R] +.RE +.PP +The command prints the following: +.RS +.PP +\f[CR]Hashes are recorded in module mb\f[R] +.RE +.RE +.IP "5." 3 +Print information about each JMOD archive contained in the +\f[CR]jmodhashex\f[R] directory. +Run the highlighted commands from the \f[CR]jmodhashex\f[R] directory: +.RS 4 +.IP +.EX +jmod describe jmods/ma.jmod + +ma + requires mandated java.base + requires mb + +jmod describe jmods/mb.jmod + +mb + requires mandated java.base + hashes ma SHA\-256 07667d5032004b37b42ec2bb81b46df380cf29e66962a16481ace2e71e74073a +.EE +.RE +.IP "6." 3 +Attempt to create a runtime image that contains the module \f[CR]ma\f[R] +from the directory \f[CR]jmodhashex2\f[R] but the module \f[CR]mb\f[R] +from the directory \f[CR]jmodhashex\f[R]. +Run the following command from the \f[CR]jmodhashex2\f[R] directory: +.RS 4 +.IP \(bu 2 +\f[B]Linux and macOS:\f[R] +.RS 2 +.RS +.PP +\f[CR]jlink \-\-module\-path $JAVA_HOME/jmods:jmods/ma.jmod:../jmodhashex/jmods/mb.jmod \-\-add\-modules ma \-\-output ma\-app\f[R] +.RE +.RE +.IP \(bu 2 +\f[B]Windows:\f[R] +.RS 2 +.RS +.PP +\f[CR]jlink \-\-module\-path %JAVA_HOME%/jmods;jmods/ma.jmod;../jmodhashex/jmods/mb.jmod \-\-add\-modules ma \-\-output ma\-app\f[R] +.RE +.RE +.PP +The command prints an error message similar to the following: +.IP +.EX +Error: Hash of ma (a2d77889b0cb067df02a3abc39b01ac1151966157a68dc4241562c60499150d2) differs to +expected hash (07667d5032004b37b42ec2bb81b46df380cf29e66962a16481ace2e71e74073a) recorded in mb +.EE +.RE diff --git a/man/jnativescan.1 b/man/jnativescan.1 new file mode 100644 index 000000000..af5118ad8 --- /dev/null +++ b/man/jnativescan.1 @@ -0,0 +1,166 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JNATIVESCAN" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jnativescan \- static analysis tool that scans one or more jar files for +uses of native functionalities, such as restricted method calls or +\f[CR]native\f[R] method declarations. +.SH SYNOPSIS +\f[CR]jnativescan\f[R] [\f[I]options\f[R]] +.TP +\f[I]options\f[R] +See \f[B]Options for the jnativescan Command\f[R] +.SH DESCRIPTION +The \f[CR]jnative\f[R] tool is a static analysis tool provided by the +JDK that scans a JAR file for uses of native functionalities, such as +restricted method calls or \f[CR]native\f[R] method declarations. +.PP +\f[CR]jnativescan\f[R] accepts a runtime class path and module path +configuration, as well as a set of root modules, and a target release. +It scans the jars on the class and module paths, and reports uses of +native functionalities either in a tree like structure, which also +identifies that calling classes and methods, or as a list of module +names when the \f[CR]\-\-print\-native\-access\f[R] flag is specified. +.SH OPTIONS FOR THE JNATIVESCAN COMMAND +The following options are available: +.TP +\f[CR]\-\-class\-path\f[R] \f[I]path\f[R] +Used to specify a list of paths pointing to jar files to be scanned. +.PP +All jar files specified through this list will be scanned. +If a jar file contains a \f[CR]Class\-Path\f[R] attribute in its +manifest, jar files listed there will be scanned as well. +Jar files listed in the \f[CR]Class\-Path\f[R] manifest attribute that +can not be found are ignored. +All the jar files found are treated as if they belonged to the unnamed +module. +.TP +\f[CR]\-\-module\-path\f[R] \f[I]path\f[R] +Used to specify a list of paths pointing to jar files or directories +containing jar files, that the tool can use to find modules that need to +be scanned. +The list of jar files that will be scanned depends on the +\f[CR]\-\-add\-modules\f[R] option. +.RS +For both the \f[CR]\-\-class\-path\f[R] and \f[CR]\-\-module\-path\f[R] +options, \f[I]path\f[R] should be a search path that consists of one or +more jar files, separated by the system\-specific path separator. +For example: +.IP \(bu 2 +\f[B]Linux and macOS:\f[R] +.RS 2 +.RS +.PP +\f[CR]\-\-class\-path /some/foo.jar:/another/different/bar.jar\f[R] +.RE +.RE +\f[B]Note:\f[R] +On Windows, use a semicolon (\f[CR];\f[R]) as the separator instead of a +colon (\f[CR]:\f[R]). +.IP \(bu 2 +\f[B]Windows:\f[R] +.RS 2 +.RS +.PP +\f[CR]\-\-class\-path C:\(rssome\(rsfoo.jar;C:\(rsanother\(rsdifferent\(rsbar.jar\f[R] +.RE +.RE +.RE +.TP +\f[CR]\-\-add\-modules\f[R] \f[I]module[,module...]\f[R] +Used to specify a comma\-separated list of module names that indicate +the root modules to scan. +All the root modules will be scanned, as well as any modules that they +depend on. +This includes dependencies on service implementations specified through +the \f[CR]uses\f[R] directive in a module\(aqs \f[CR]module\-info\f[R] +file. +All modules found on the module path that provide an implementation of +such a service will be scanned as well. +.TP +\f[CR]\-\-release\f[R] \f[I]version\f[R] +Used to specify the Java SE release that specifies the set of restricted +methods to scan for. +For multi\-release jar files, this option also indicates the version of +class file that should be loaded from the jar. +This option should be set to the version of the runtime under which the +application is eventually intended to be run. +If this flag is omitted, the version of \f[CR]jnativescan\f[R] is used +as release version, which is the same as the version of the JDK that the +tool belongs to. +.TP +\f[CR]\-\-print\-native\-access\f[R] +Print a comma\-separated list of module names that use native +functionalities, instead of the default tree structure. +.TP +\f[CR]\-\-help\f[R] or \f[CR]\-h\f[R] +Prints out a full help message. +.TP +\f[CR]\-\-version\f[R] +Prints out the abbreviated version string of the tool. +.SH EXAMPLE OF \f[CR]jnativescan\f[R] USE +\f[CR]jnativescan\f[R] accepts a runtime configuration in the form of a +class path, module path, set of root modules, and a target release +version. +For the class path, the tool will scan all jar files, including those +found recursively through the \f[CR]Class\-Path\f[R] manifest attribute. +For the module path, the tool scans all root modules specified through +\f[CR]\-\-add\-modules\f[R], and any (transitive) dependence of the root +modules, including any modules that contain service implementations that +are used by a scanned module. +.PP +By default, the tool prints out which jars, classes, and methods use +native functionalities, in a tree\-like structure. +The following is an example output: +.IP +.EX +$ jnativescan \-\-class\-path app.jar +app.jar (ALL\-UNNAMED): + foo.Main: + foo.Main::main(String[])void references restricted methods: + java.lang.foreign.MemorySegment::reinterpret(long)MemorySegment + foo.Main::nativeMethod()void is a native method declaration +.EE +.PP +\f[CR]app.jar (ALL\-UNNAMED)\f[R] is the path to the jar file, with the +module name in parentheses behind it. +Since in this case the jar file appears on the class path, +\f[CR]ALL\-UNNAMED\f[R] is printed to indicate the unnamed module. +The second line of the output, \f[CR]foo.Main\f[R], indicates that +methods using native functionalities were found in the +\f[CR]foo.Main\f[R] class. +The next line: +.IP +.EX + foo.Main::main(String[])void references restricted methods: +.EE +.PP +Indicates that the \f[CR]main(String[])\f[R] method in the +\f[CR]foo.Main\f[R] class references a restricted method, which is +listed on the following line as: +.IP +.EX + java.lang.foreign.MemorySegment::reinterpret(long)MemorySegment +.EE +.PP +Lastly, the text: +.IP +.EX + foo.Main::nativeMethod()void is a native method declaration +.EE +.PP +Indicates that the \f[CR]foo.Main\f[R] class contains a declaration of a +\f[CR]native\f[R] method named \f[CR]nativeMethod\f[R]. +.PP +If we add \f[CR]\-\-print\-native\-access\f[R] to the example command +line, we instead get a list of the names of modules that contain +accesses to native functionalities: +.IP +.EX +$ jnativescan \-\-class\-path app.jar \-\-print\-native\-access +ALL\-UNNAMED +.EE +.PP +In this case the output consists of just \f[CR]ALL\-UNNAMED\f[R], which +indicates a jar file on the class path, that is, in the unnamed module, +contains an access to native functionalities. diff --git a/man/jpackage.1 b/man/jpackage.1 new file mode 100644 index 000000000..0e71a8ea4 --- /dev/null +++ b/man/jpackage.1 @@ -0,0 +1,831 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JPACKAGE" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jpackage \- tool for packaging self\-contained Java applications. +.SH SYNOPSIS +\f[CR]jpackage\f[R] [\f[I]options\f[R]] +.TP +\f[I]options\f[R] +Command\-line options separated by spaces. +See \f[B]jpackage Options\f[R]. +.SH DESCRIPTION +The \f[CR]jpackage\f[R] tool will take as input a Java application and a +Java run\-time image, and produce a Java application image that includes +all the necessary dependencies. +It will be able to produce a native package in a platform\-specific +format, such as an exe on Windows or a dmg on macOS. +Each format must be built on the platform it runs on, there is no +cross\-platform support. +The tool will have options that allow packaged applications to be +customized in various ways. +.SH JPACKAGE OPTIONS +.SS Generic Options: +.TP +\f[CR]\(at\f[R]\f[I]filename\f[R] +Read options from a file. +.RS +.PP +This option can be used multiple times. +.RE +.TP +\f[CR]\-\-type\f[R] or \f[CR]\-t\f[R] \f[I]type\f[R] +The type of package to create +.RS +Valid values are: {\(dqapp\-image\(dq, \(dqexe\(dq, \(dqmsi\(dq, +\(dqrpm\(dq, \(dqdeb\(dq, \(dqpkg\(dq, \(dqdmg\(dq} +If this option is not specified a platform dependent default type will +be created. +.RE +.TP +\f[CR]\-\-app\-version\f[R] \f[I]version\f[R] +Version of the application and/or package +.TP +\f[CR]\-\-copyright\f[R] \f[I]copyright\f[R] +Copyright for the application +.TP +\f[CR]\-\-description\f[R] \f[I]description\f[R] +Description of the application +.TP +\f[CR]\-\-help\f[R] or \f[CR]\-h\f[R] +Print the usage text with a list and description of each valid option +for the current platform to the output stream, and exit. +.TP +\f[CR]\-\-icon\f[R] \f[I]path\f[R] +Path of the icon of the application package +.RS +.PP +(absolute path or relative to the current directory) +.RE +.TP +\f[CR]\-\-name\f[R] or \f[CR]\-n\f[R] \f[I]name\f[R] +Name of the application and/or package +.TP +\f[CR]\-\-dest\f[R] or \f[CR]\-d\f[R] \f[I]destination\f[R] +Path where generated output file is placed +.RS +.PP +(absolute path or relative to the current directory). +.PP +Defaults to the current working directory. +.RE +.TP +\f[CR]\-\-resource\-dir\f[R] \f[I]path\f[R] +Path to override jpackage resources +.RS +.PP +(absolute path or relative to the current directory) +.PP +Icons, template files, and other resources of jpackage can be +over\-ridden by adding replacement resources to this directory. +.RE +.TP +\f[CR]\-\-temp\f[R] \f[I]directory\f[R] +Path of a new or empty directory used to create temporary files +.RS +.PP +(absolute path or relative to the current directory) +.PP +If specified, the temp dir will not be removed upon the task completion +and must be removed manually. +.PP +If not specified, a temporary directory will be created and removed upon +the task completion. +.RE +.TP +\f[CR]\-\-vendor\f[R] \f[I]vendor\f[R] +Vendor of the application +.TP +\f[CR]\-\-verbose\f[R] +Enables verbose output. +.TP +\f[CR]\-\-version\f[R] +Print the product version to the output stream and exit. +.SS Options for creating the runtime image: +.TP +\f[CR]\-\-add\-modules\f[R] \f[I]module\-name\f[R] [\f[CR],\f[R]\f[I]module\-name\f[R]...] +A comma (\(dq,\(dq) separated list of modules to add +.RS +.PP +This module list, along with the main module (if specified) will be +passed to jlink as the \-\-add\-module argument. +If not specified, either just the main module (if \-\-module is +specified), or the default set of modules (if \-\-main\-jar is +specified) are used. +.PP +This option can be used multiple times. +.RE +.TP +\f[CR]\-\-module\-path\f[R] or \f[CR]\-p\f[R] \f[I]module\-path\f[R] [\f[CR],\f[R]\f[I]module\-path\f[R]...] +A File.pathSeparator separated list of paths +.RS +.PP +Each path is either a directory of modules or the path to a modular jar, +and is absolute or relative to the current directory. +.PP +This option can be used multiple times. +.RE +.TP +\f[CR]\-\-jlink\-options\f[R] \f[I]options\f[R] +A space separated list of options to pass to jlink +.RS +.PP +If not specified, defaults to \(dq\-\-strip\-native\-commands +\-\-strip\-debug \-\-no\-man\-pages \-\-no\-header\-files\(dq +.PP +This option can be used multiple times. +.RE +.TP +\f[CR]\-\-runtime\-image\f[R] \f[I]directory\f[R] +Path of the predefined runtime image that will be copied into the +application image +.RS +.PP +(absolute path or relative to the current directory) +.PP +If \-\-runtime\-image is not specified, jpackage will run jlink to +create the runtime image using options specified by \-\-jlink\-options. +.RE +.SS Options for creating the application image: +.TP +\f[CR]\-\-input\f[R] or \f[CR]\-i\f[R] \f[I]directory\f[R] +Path of the input directory that contains the files to be packaged +.RS +.PP +(absolute path or relative to the current directory) +.PP +All files in the input directory will be packaged into the application +image. +.RE +.TP +\f[CR]\-\-app\-content\f[R] \f[I]additional\-content\f[R] [\f[CR],\f[R]\f[I]additional\-content\f[R]...] +A comma separated list of paths to files and/or directories to add to +the application payload. +.RS +.PP +This option can be used more than once. +.RE +.SS Options for creating the application launcher(s): +.TP +\f[CR]\-\-add\-launcher\f[R] \f[I]name\f[R]=\f[I]path\f[R] +Name of launcher, and a path to a Properties file that contains a list +of key, value pairs +.RS +.PP +(absolute path or relative to the current directory) +.PP +The keys \(dqmodule\(dq, \(dqmain\-jar\(dq, \(dqmain\-class\(dq, +\(dqdescription\(dq, \(dqarguments\(dq, \(dqjava\-options\(dq, +\(dqicon\(dq, \(dqlauncher\-as\-service\(dq, \(dqwin\-console\(dq, +\(dqwin\-shortcut\(dq, \(dqwin\-menu\(dq, and \(dqlinux\-shortcut\(dq +can be used. +.PP +These options are added to, or used to overwrite, the original command +line options to build an additional alternative launcher. +The main application launcher will be built from the command line +options. +Additional alternative launchers can be built using this option, and +this option can be used multiple times to build multiple additional +launchers. +.RE +.TP +\f[CR]\-\-arguments\f[R] \f[I]arguments\f[R] +Command line arguments to pass to the main class if no command line +arguments are given to the launcher +.RS +.PP +This option can be used multiple times. +.PP +Value can contain substrings that will be expanded at runtime. +Two types of such substrings are supported: environment variables and +\(dqAPPDIR\(dq, \(dqBINDIR\(dq, and \(dqROOTDIR\(dq tokens. +.PP +An expandable substring should be enclosed between the dollar sign +character ($) and the first following non\-alphanumeric character. +Alternatively, it can be enclosed between \(dq${\(dq and \(dq}\(dq +substrings. +.PP +Expandable substrings are case\-sensitive on Unix and case\-insensitive +on Windows. +No string expansion occurs if the referenced environment variable is +undefined. +.PP +Environment variables with names \(dqAPPDIR\(dq, \(dqBINDIR\(dq, and +\(dqROOTDIR\(dq will be ignored, and these expandable substrings will be +replaced by values calculated by the app launcher. +.PP +Prefix the dollar sign character with the backslash character (\(rs) to +prevent substring expansion. +.RE +.TP +\f[CR]\-\-java\-options\f[R] \f[I]options\f[R] +Options to pass to the Java runtime +.RS +.PP +This option can be used multiple times. +.PP +Value can contain substrings that will be substituted at runtime, such +as for the \-\-arguments option. +.RE +.TP +\f[CR]\-\-main\-class\f[R] \f[I]class\-name\f[R] +Qualified name of the application main class to execute +.RS +.PP +This option can only be used if \-\-main\-jar is specified. +.RE +.TP +\f[CR]\-\-main\-jar\f[R] \f[I]main\-jar\f[R] +The main JAR of the application; containing the main class (specified as +a path relative to the input path) +.RS +.PP +Either \-\-module or \-\-main\-jar option can be specified but not both. +.RE +.TP +\f[CR]\-\-module\f[R] or \f[CR]\-m\f[R] \f[I]module\-name\f[R][/\f[I]main\-class\f[R]] +The main module (and optionally main class) of the application +.RS +.PP +This module must be located on the module path. +.PP +When this option is specified, the main module will be linked in the +Java runtime image. +Either \-\-module or \-\-main\-jar option can be specified but not both. +.RE +.SS Platform dependent options for creating the application launcher: +.SS Windows platform options (available only when running on Windows): +.TP +\f[CR]\-\-win\-console\f[R] +Creates a console launcher for the application, should be specified for +application which requires console interactions +.SS macOS platform options (available only when running on macOS): +.TP +\f[CR]\-\-mac\-package\-identifier\f[R] \f[I]identifier\f[R] +An identifier that uniquely identifies the application for macOS +.RS +.PP +Defaults to the main class name. +.PP +May only use alphanumeric (A\-Z,a\-z,0\-9), hyphen (\-), and period (.) +characters. +.RE +.TP +\f[CR]\-\-mac\-package\-name\f[R] \f[I]name\f[R] +Name of the application as it appears in the Menu Bar +.RS +.PP +This can be different from the application name. +.PP +This name must be less than 16 characters long and be suitable for +displaying in the menu bar and the application Info window. +Defaults to the application name. +.RE +.TP +\f[CR]\-\-mac\-package\-signing\-prefix\f[R] \f[I]prefix\f[R] +When signing the application package, this value is prefixed to all +components that need to be signed that don\(aqt have an existing package +identifier. +.TP +\f[CR]\-\-mac\-sign\f[R] +Request that the package or the predefined application image be signed. +.TP +\f[CR]\-\-mac\-signing\-keychain\f[R] \f[I]keychain\-name\f[R] +Name of the keychain to search for the signing identity +.RS +.PP +If not specified, the standard keychains are used. +.RE +.TP +\f[CR]\-\-mac\-signing\-key\-user\-name\f[R] \f[I]name\f[R] +Team or user name portion in Apple signing identities +.TP +\f[CR]\-\-mac\-app\-store\f[R] +Indicates that the jpackage output is intended for the Mac App Store. +.TP +\f[CR]\-\-mac\-entitlements\f[R] \f[I]path\f[R] +Path to file containing entitlements to use when signing executables and +libraries in the bundle +.TP +\f[CR]\-\-mac\-app\-category\f[R] \f[I]category\f[R] +String used to construct LSApplicationCategoryType in application plist +.RS +.PP +The default value is \(dqutilities\(dq. +.RE +.SS Options for creating the application package: +.TP +\f[CR]\-\-about\-url\f[R] \f[I]url\f[R] +URL of the application\(aqs home page +.TP +\f[CR]\-\-app\-image\f[R] \f[I]directory\f[R] +Location of the predefined application image that is used to build an +installable package (on all platforms) or to be signed (on macOS) +.RS +.PP +(absolute path or relative to the current directory) +.RE +.TP +\f[CR]\-\-file\-associations\f[R] \f[I]path\f[R] +Path to a Properties file that contains list of key, value pairs +.RS +.PP +(absolute path or relative to the current directory) +.PP +The keys \(dqextension\(dq, \(dqmime\-type\(dq, \(dqicon\(dq, and +\(dqdescription\(dq can be used to describe the association. +.PP +This option can be used multiple times. +.RE +.TP +\f[CR]\-\-install\-dir\f[R] \f[I]path\f[R] +Absolute path of the installation directory of the application (on macOS +or linux), or relative sub\-path of the installation directory such as +\(dqProgram Files\(dq or \(dqAppData\(dq (on Windows) +.TP +\f[CR]\-\-license\-file\f[R] \f[I]path\f[R] +Path to the license file +.RS +.PP +(absolute path or relative to the current directory) +.RE +.TP +\f[CR]\-\-runtime\-image\f[R] \f[I]path\f[R] +Path of the predefined runtime image to install +.RS +.PP +(absolute path or relative to the current directory) +.PP +Option is required when creating a runtime installer. +.RE +.TP +\f[CR]\-\-launcher\-as\-service\f[R] +Request to create an installer that will register the main application +launcher as a background service\-type application. +.SS Platform dependent options for creating the application package: +.SS Windows platform options (available only when running on Windows): +.TP +\f[CR]\-\-win\-dir\-chooser\f[R] +Adds a dialog to enable the user to choose a directory in which the +product is installed. +.TP +\f[CR]\-\-win\-help\-url\f[R] \f[I]url\f[R] +URL where user can obtain further information or technical support +.TP +\f[CR]\-\-win\-menu\f[R] +Request to add a Start Menu shortcut for this application +.TP +\f[CR]\-\-win\-menu\-group\f[R] \f[I]menu\-group\-name\f[R] +Start Menu group this application is placed in +.TP +\f[CR]\-\-win\-per\-user\-install\f[R] +Request to perform an install on a per\-user basis +.TP +\f[CR]\-\-win\-shortcut\f[R] +Request to create a desktop shortcut for this application +.TP +\f[CR]\-\-win\-shortcut\-prompt\f[R] +Adds a dialog to enable the user to choose if shortcuts will be created +by installer +.TP +\f[CR]\-\-win\-update\-url\f[R] \f[I]url\f[R] +URL of available application update information +.TP +\f[CR]\-\-win\-upgrade\-uuid\f[R] \f[I]id\f[R] +UUID associated with upgrades for this package +.SS Linux platform options (available only when running on Linux): +.TP +\f[CR]\-\-linux\-package\-name\f[R] \f[I]name\f[R] +Name for Linux package +.RS +.PP +Defaults to the application name. +.RE +.TP +\f[CR]\-\-linux\-deb\-maintainer\f[R] \f[I]email\-address\f[R] +Maintainer for .deb bundle +.TP +\f[CR]\-\-linux\-menu\-group\f[R] \f[I]menu\-group\-name\f[R] +Menu group this application is placed in +.TP +\f[CR]\-\-linux\-package\-deps\f[R] \f[I]package\-dep\-string\f[R] +Required packages or capabilities for the application +.TP +\f[CR]\-\-linux\-rpm\-license\-type\f[R] \f[I]type\f[R] +Type of the license (\(dqLicense: \f[I]value\f[R]\(dq of the RPM .spec) +.TP +\f[CR]\-\-linux\-app\-release\f[R] \f[I]release\f[R] +Release value of the RPM <name>.spec file or Debian revision value of +the DEB control file +.TP +\f[CR]\-\-linux\-app\-category\f[R] \f[I]category\-value\f[R] +Group value of the RPM <name>.spec file or Section value of DEB control +file +.TP +\f[CR]\-\-linux\-shortcut\f[R] +Creates a shortcut for the application. +.SS macOS platform options (available only when running on macOS): +.TP +\f[CR]\-\-mac\-dmg\-content\f[R] \f[I]additional\-content\f[R] [\f[CR],\f[R]\f[I]additional\-content\f[R]...] +Include all the referenced content in the dmg. +.RS +.PP +This option can be used more than once. +.RE +.SH JPACKAGE EXAMPLES +.IP +.EX +Generate an application package suitable for the host system: +.EE +.IP +.EX +For a modular application: + jpackage \-n name \-p modulePath \-m moduleName/className +For a non\-modular application: + jpackage \-i inputDir \-n name \(rs + \-\-main\-class className \-\-main\-jar myJar.jar +From a pre\-built application image: + jpackage \-n name \-\-app\-image appImageDir +.EE +.IP +.EX +Generate an application image: +.EE +.IP +.EX +For a modular application: + jpackage \-\-type app\-image \-n name \-p modulePath \(rs + \-m moduleName/className +For a non\-modular application: + jpackage \-\-type app\-image \-i inputDir \-n name \(rs + \-\-main\-class className \-\-main\-jar myJar.jar +To provide your own options to jlink, run jlink separately: + jlink \-\-output appRuntimeImage \-p modulePath \(rs + \-\-add\-modules moduleName \(rs + \-\-no\-header\-files [<additional jlink options>...] + jpackage \-\-type app\-image \-n name \(rs + \-m moduleName/className \-\-runtime\-image appRuntimeImage +.EE +.IP +.EX +Generate a Java runtime package: +.EE +.IP +.EX +jpackage \-n name \-\-runtime\-image <runtime\-image> +.EE +.IP +.EX +Sign the predefined application image (on macOS): +.EE +.IP +.EX +jpackage \-\-type app\-image \-\-app\-image <app\-image> \(rs + \-\-mac\-sign [<additional signing options>...] + +Note: the only additional options that are permitted in this mode are: + the set of additional mac signing options and \-\-verbose +.EE +.SH JPACKAGE AND JLINK +jpackage will use jlink to create Java Runtime unless the +\f[CR]\-\-runtime\-image\f[R] option is used. +The created Java Runtime image on Windows will include MS runtime +libraries bundled with the JDK. +If MS runtime libraries of a different version are needed for the +application, the user will need to add/replace those themselves. +.SH JPACKAGE RESOURCE DIRECTORY +Icons, template files, and other resources of jpackage can be +over\-ridden by adding replacement resources to this directory. +jpackage will lookup files by specific names in the resource directory. +.SS Resource directory files considered only when running on Linux: +.TP +\f[CR]<launcher\-name>.png\f[R] +Application launcher icon +.RS +.PP +Default resource is \f[I]JavaApp.png\f[R] +.RE +.TP +\f[CR]<launcher\-name>.desktop\f[R] +A desktop file to be used with \f[CR]xdg\-desktop\-menu\f[R] command +.RS +.PP +Considered with application launchers registered for file associations +and/or have an icon +.PP +Default resource is \f[I]template.desktop\f[R] +.RE +.SS Resource directory files considered only when building Linux DEB/RPM installer: +.TP +\f[CR]<package\-name>\-<launcher\-name>.service\f[R] +systemd unit file for application launcher registered as a background +service\-type application +.RS +.PP +Default resource is \f[I]unit\-template.service\f[R] +.RE +.SS Resource directory files considered only when building Linux RPM installer: +.TP +\f[CR]<package\-name>.spec\f[R] +RPM spec file +.RS +.PP +Default resource is \f[I]template.spec\f[R] +.RE +.SS Resource directory files considered only when building Linux DEB installer: +.TP +\f[CR]control\f[R] +Control file +.RS +.PP +Default resource is \f[I]template.control\f[R] +.RE +.TP +\f[CR]copyright\f[R] +Copyright file +.RS +.PP +Default resource is \f[I]template.copyright\f[R] +.RE +.TP +\f[CR]preinstall\f[R] +Pre\-install shell script +.RS +.PP +Default resource is \f[I]template.preinstall\f[R] +.RE +.TP +\f[CR]prerm\f[R] +Pre\-remove shell script +.RS +.PP +Default resource is \f[I]template.prerm\f[R] +.RE +.TP +\f[CR]postinstall\f[R] +Post\-install shell script +.RS +.PP +Default resource is \f[I]template.postinstall\f[R] +.RE +.TP +\f[CR]postrm\f[R] +Post\-remove shell script +.RS +.PP +Default resource is \f[I]template.postrm\f[R] +.RE +.SS Resource directory files considered only when running on Windows: +.TP +\f[CR]<launcher\-name>.ico\f[R] +Application launcher icon +.RS +.PP +Default resource is \f[I]JavaApp.ico\f[R] +.RE +.TP +\f[CR]<launcher\-name>.properties\f[R] +Properties file for application launcher executable +.RS +.PP +Default resource is \f[I]WinLauncher.template\f[R] +.RE +.SS Resource directory files considered only when building Windows MSI/EXE installer: +.TP +\f[CR]<application\-name>\-post\-image.wsf\f[R] +A Windows Script File (WSF) to run after building application image +.TP +\f[CR]main.wxs\f[R] +Main WiX project file +.RS +.PP +Default resource is \f[I]main.wxs\f[R] +.RE +.TP +\f[CR]overrides.wxi\f[R] +Overrides WiX project file +.RS +.PP +Default resource is \f[I]overrides.wxi\f[R] +.RE +.TP +\f[CR]service\-installer.exe\f[R] +Service installer executable +.RS +.PP +Considered if some application launchers are registered as background +service\-type applications +.RE +.TP +\f[CR]<launcher\-name>\-service\-install.wxi\f[R] +Service installer WiX project file +.RS +.PP +Considered if some application launchers are registered as background +service\-type applications +.PP +Default resource is \f[I]service\-install.wxi\f[R] +.RE +.TP +\f[CR]<launcher\-name>\-service\-config.wxi\f[R] +Service installer WiX project file +.RS +.PP +Considered if some application launchers are registered as background +service\-type applications +.PP +Default resource is \f[I]service\-config.wxi\f[R] +.RE +.TP +\f[CR]InstallDirNotEmptyDlg.wxs\f[R] +WiX project file for installer UI dialog checking installation directory +doesn\(aqt exist or is empty +.RS +.PP +Default resource is \f[I]InstallDirNotEmptyDlg.wxs\f[R] +.RE +.TP +\f[CR]ShortcutPromptDlg.wxs\f[R] +WiX project file for installer UI dialog configuring shortcuts +.RS +.PP +Default resource is \f[I]ShortcutPromptDlg.wxs\f[R] +.RE +.TP +\f[CR]bundle.wxf\f[R] +WiX project file with the hierarchy of components of application image +.TP +\f[CR]ui.wxf\f[R] +WiX project file for installer UI +.TP +\f[CR]os\-condition.wxf\f[R] +WiX project file with the condition to block installation on older +versions of Windows +.RS +.PP +Default resource is \f[I]os\-condition.wxf\f[R] +.RE +.TP +\f[CR]wix\-conv.xsl\f[R] +WiX source code converter. +Used for converting WiX sources from WiX v3 to v4 schema when WiX v4 or +newer is used +.RS +.PP +Default resource is \f[I]wix3\-to\-wix4\-conv.xsl\f[R] +.RE +.SS Resource directory files considered only when building Windows EXE installer: +.TP +\f[CR]WinInstaller.properties\f[R] +Properties file for the installer executable +.RS +.PP +Default resource is \f[I]WinInstaller.template\f[R] +.RE +.TP +\f[CR]<package\-name>\-post\-msi.wsf\f[R] +A Windows Script File (WSF) to run after building embedded MSI installer +for EXE installer +.TP +\f[CR]installer.exe\f[R] +Executable wrapper for MSI installer +.RS +.PP +Default resource is \f[I]msiwrapper.exe\f[R] +.RE +.SS Resource directory files considered only when running on macOS: +.TP +\f[CR]<launcher\-name>.icns\f[R] +Application launcher icon +.RS +.PP +Default resource is \f[I]JavaApp.icns\f[R] +.RE +.TP +\f[CR]Info.plist\f[R] +Application property list file +.RS +.PP +Default resource is \f[I]Info\-lite.plist.template\f[R] +.RE +.TP +\f[CR]Runtime\-Info.plist\f[R] +Java Runtime property list file +.RS +.PP +Default resource is \f[I]Runtime\-Info.plist.template\f[R] +.RE +.TP +\f[CR]<application\-name>.entitlements\f[R] +Signing entitlements property list file +.RS +.PP +Default resource is \f[I]sandbox.plist\f[R] +.RE +.SS Resource directory files considered only when building macOS PKG/DMG installer: +.TP +\f[CR]<package\-name>\-post\-image.sh\f[R] +Shell script to run after building application image +.SS Resource directory files considered only when building macOS PKG installer: +.TP +\f[CR]uninstaller\f[R] +Uninstaller shell script +.RS +.PP +Considered if some application launchers are registered as background +service\-type applications +.PP +Default resource is \f[I]uninstall.command.template\f[R] +.RE +.TP +\f[CR]preinstall\f[R] +Pre\-install shell script +.RS +.PP +Default resource is \f[I]preinstall.template\f[R] +.RE +.TP +\f[CR]postinstall\f[R] +Post\-install shell script +.RS +.PP +Default resource is \f[I]postinstall.template\f[R] +.RE +.TP +\f[CR]services\-preinstall\f[R] +Pre\-install shell script for services package +.RS +.PP +Considered if some application launchers are registered as background +service\-type applications +.PP +Default resource is \f[I]services\-preinstall.template\f[R] +.RE +.TP +\f[CR]services\-postinstall\f[R] +Post\-install shell script for services package +.RS +.PP +Considered if some application launchers are registered as background +service\-type applications +.PP +Default resource is \f[I]services\-postinstall.template\f[R] +.RE +.TP +\f[CR]<package\-name>\-background.png\f[R] +Background image +.RS +.PP +Default resource is \f[I]background_pkg.png\f[R] +.RE +.TP +\f[CR]<package\-name>\-background\-darkAqua.png\f[R] +Dark background image +.RS +.PP +Default resource is \f[I]background_pkg.png\f[R] +.RE +.TP +\f[CR]product\-def.plist\f[R] +Package property list file +.RS +.PP +Default resource is \f[I]product\-def.plist\f[R] +.RE +.TP +\f[CR]<package\-name>\-<launcher\-name>.plist\f[R] +launchd property list file for application launcher registered as a +background service\-type application +.RS +.PP +Default resource is \f[I]launchd.plist.template\f[R] +.RE +.SS Resource directory files considered only when building macOS DMG installer: +.TP +\f[CR]<package\-name>\-dmg\-setup.scpt\f[R] +Setup AppleScript script +.RS +.PP +Default resource is \f[I]DMGsetup.scpt\f[R] +.RE +.TP +\f[CR]<package\-name>\-license.plist\f[R] +License property list file +.RS +.PP +Default resource is \f[I]lic_template.plist\f[R] +.RE +.TP +\f[CR]<package\-name>\-background.tiff\f[R] +Background image +.RS +.PP +Default resource is \f[I]background_dmg.tiff\f[R] +.RE +.TP +\f[CR]<package\-name>\-volume.icns\f[R] +Volume icon +.RS +.PP +Default resource is \f[I]JavaApp.icns\f[R] +.RE diff --git a/man/jps.1 b/man/jps.1 new file mode 100644 index 000000000..afc93b67b --- /dev/null +++ b/man/jps.1 @@ -0,0 +1,189 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JPS" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jps \- list the instrumented JVMs on the target system +.SH SYNOPSIS +\f[B]Note:\f[R] This command is experimental and unsupported. +.PP +\f[CR]jps\f[R] [\f[CR]\-q\f[R]] [\f[CR]\-mlvV\f[R]] [\f[I]hostid\f[R]] +.PP +\f[CR]jps\f[R] [\f[CR]\-help\f[R]] +.SH OPTIONS +.TP +\f[CR]\-q\f[R] +Suppresses the output of the class name, JAR file name, and arguments +passed to the \f[CR]main\f[R] method, producing a list of only local JVM +identifiers. +.TP +\f[CR]\-mlvV\f[R] +You can specify any combination of these options. +.RS +.IP \(bu 2 +\f[CR]\-m\f[R] displays the arguments passed to the \f[CR]main\f[R] +method. +The output may be \f[CR]null\f[R] for embedded JVMs. +.IP \(bu 2 +\f[CR]\-l\f[R] displays the full package name for the application\(aqs +\f[CR]main\f[R] class or the full path name to the application\(aqs JAR +file. +.IP \(bu 2 +\f[CR]\-v\f[R] displays the arguments passed to the JVM. +.IP \(bu 2 +\f[CR]\-V\f[R] suppresses the output of the class name, JAR file name, +and arguments passed to the \f[CR]main\f[R] method, producing a list of +only local JVM identifiers. +.RE +.TP +\f[I]hostid\f[R] +The identifier of the host for which the process report should be +generated. +The \f[CR]hostid\f[R] can include optional components that indicate the +communications protocol, port number, and other implementation specific +data. +See \f[B]Host Identifier\f[R]. +.TP +\f[CR]\-help\f[R] +Displays the help message for the \f[CR]jps\f[R] command. +.SH DESCRIPTION +The \f[CR]jps\f[R] command lists the instrumented Java HotSpot VMs on +the target system. +The command is limited to reporting information on JVMs for which it has +the access permissions. +.PP +If the \f[CR]jps\f[R] command is run without specifying a +\f[CR]hostid\f[R], then it searches for instrumented JVMs on the local +host. +If started with a \f[CR]hostid\f[R], then it searches for JVMs on the +indicated host, using the specified protocol and port. +A \f[CR]jstatd\f[R] process is assumed to be running on the target host. +.PP +The \f[CR]jps\f[R] command reports the local JVM identifier, or +\f[CR]lvmid\f[R], for each instrumented JVM found on the target system. +The \f[CR]lvmid\f[R] is typically, but not necessarily, the operating +system\(aqs process identifier for the JVM process. +With no options, the \f[CR]jps\f[R] command lists each Java +application\(aqs \f[CR]lvmid\f[R] followed by the short form of the +application\(aqs class name or jar file name. +The short form of the class name or JAR file name omits the class\(aqs +package information or the JAR files path information. +.PP +The \f[CR]jps\f[R] command uses the Java launcher to find the class name +and arguments passed to the main method. +If the target JVM is started with a custom launcher, then the class or +JAR file name, and the arguments to the \f[CR]main\f[R] method aren\(aqt +available. +In this case, the \f[CR]jps\f[R] command outputs the string +\f[CR]Unknown\f[R] for the class name, or JAR file name, and for the +arguments to the \f[CR]main\f[R] method. +.PP +The list of JVMs produced by the \f[CR]jps\f[R] command can be limited +by the permissions granted to the principal running the command. +The command lists only the JVMs for which the principal has access +rights as determined by operating system\-specific access control +mechanisms. +.SH HOST IDENTIFIER +The host identifier, or \f[CR]hostid\f[R], is a string that indicates +the target system. +The syntax of the \f[CR]hostid\f[R] string corresponds to the syntax of +a URI: +.RS +.PP +[\f[I]protocol\f[R]\f[CR]:\f[R]][[\f[CR]//\f[R]]\f[I]hostname\f[R]][\f[CR]:\f[R]\f[I]port\f[R]][\f[CR]/\f[R]\f[I]servername\f[R]] +.RE +.TP +\f[I]protocol\f[R] +The communications protocol. +If the \f[I]protocol\f[R] is omitted and a \f[I]hostname\f[R] isn\(aqt +specified, then the default protocol is a platform\-specific, optimized, +local protocol. +If the protocol is omitted and a host name is specified, then the +default protocol is \f[CR]rmi\f[R]. +.TP +\f[I]hostname\f[R] +A host name or IP address that indicates the target host. +If you omit the \f[I]hostname\f[R] parameter, then the target host is +the local host. +.TP +\f[I]port\f[R] +The default port for communicating with the remote server. +If the \f[I]hostname\f[R] parameter is omitted or the \f[I]protocol\f[R] +parameter specifies an optimized, local protocol, then the +\f[I]port\f[R] parameter is ignored. +Otherwise, treatment of the \f[I]port\f[R] parameter is +implementation\-specific. +For the default \f[CR]rmi\f[R] protocol, the \f[I]port\f[R] parameter +indicates the port number for the \f[CR]rmiregistry\f[R] on the remote +host. +If the \f[I]port\f[R] parameter is omitted, and the \f[I]protocol\f[R] +parameter indicates \f[CR]rmi\f[R], then the default +\f[CR]rmiregistry\f[R] port (\f[CR]1099\f[R]) is used. +.TP +\f[I]servername\f[R] +The treatment of this parameter depends on the implementation. +For the optimized, local protocol, this field is ignored. +For the \f[CR]rmi\f[R] protocol, this parameter is a string that +represents the name of the RMI remote object on the remote host. +See the \f[B]jstatd\f[R] command \f[CR]\-n\f[R] option. +.SH OUTPUT FORMAT OF THE JPS COMMAND +The output of the \f[CR]jps\f[R] command has the following pattern: +.RS +.PP +\f[I]lvmid\f[R] [ [ \f[I]classname\f[R] | \f[I]JARfilename\f[R] | +\f[CR]\(dqUnknown\(dq\f[R]] [ \f[I]arg\f[R]* ] [ \f[I]jvmarg\f[R]* ] ] +.RE +.PP +All output tokens are separated by white space. +An \f[CR]arg\f[R] value that includes embedded white space introduces +ambiguity when attempting to map arguments to their actual positional +parameters. +.PP +\f[B]Note:\f[R] +.PP +It\(aqs recommended that you don\(aqt write scripts to parse +\f[CR]jps\f[R] output because the format might change in future +releases. +If you write scripts that parse \f[CR]jps\f[R] output, then expect to +modify them for future releases of this tool. +.SH EXAMPLES +This section provides examples of the \f[CR]jps\f[R] command. +.PP +List the instrumented JVMs on the local host: +.IP +.EX +jps +18027 Java2Demo.JAR +18032 jps +18005 jstat +.EE +.PP +The following example lists the instrumented JVMs on a remote host. +This example assumes that the \f[CR]jstat\f[R] server and either the its +internal RMI registry or a separate external \f[CR]rmiregistry\f[R] +process are running on the remote host on the default port (port +\f[CR]1099\f[R]). +It also assumes that the local host has appropriate permissions to +access the remote host. +This example includes the \f[CR]\-l\f[R] option to output the long form +of the class names or JAR file names. +.IP +.EX +jps \-l remote.domain +3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR +2857 sun.tools.jstatd.jstatd +.EE +.PP +The following example lists the instrumented JVMs on a remote host with +a nondefault port for the RMI registry. +This example assumes that the \f[CR]jstatd\f[R] server, with an internal +RMI registry bound to port \f[CR]2002\f[R], is running on the remote +host. +This example also uses the \f[CR]\-m\f[R] option to include the +arguments passed to the \f[CR]main\f[R] method of each of the listed +Java applications. +.IP +.EX +jps \-m remote.domain:2002 +3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR +3102 sun.tools.jstatd.jstatd \-p 2002 +.EE diff --git a/man/jrunscript.1 b/man/jrunscript.1 new file mode 100644 index 000000000..f38be92af --- /dev/null +++ b/man/jrunscript.1 @@ -0,0 +1,123 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JRUNSCRIPT" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jrunscript \- run a command\-line script shell that supports interactive +and batch modes +.SH SYNOPSIS +\f[B]Note:\f[R] +.PP +This tool is \f[B]experimental\f[R] and unsupported. +It is deprecated and will be removed in a future release. +.PP +\f[CR]jrunscript\f[R] [\f[I]options\f[R]] [\f[I]arguments\f[R]] +.TP +\f[I]options\f[R] +This represents the \f[CR]jrunscript\f[R] command\-line options that can +be used. +See \f[B]Options for the jrunscript Command\f[R]. +.TP +\f[I]arguments\f[R] +Arguments, when used, follow immediately after options or the command +name. +See \f[B]Arguments\f[R]. +.SH DESCRIPTION +The \f[CR]jrunscript\f[R] command is a language\-independent +command\-line script shell. +The \f[CR]jrunscript\f[R] command supports both an interactive +(read\-eval\-print) mode and a batch (\f[CR]\-f\f[R] option) mode of +script execution. +By default, JavaScript is the language used, but the \f[CR]\-l\f[R] +option can be used to specify a different language. +By using Java to scripting language communication, the +\f[CR]jrunscript\f[R] command supports an exploratory programming style. +.PP +If JavaScript is used, then before it evaluates a user defined script, +the \f[CR]jrunscript\f[R] command initializes certain built\-in +functions and objects, which are documented in the API Specification for +\f[CR]jrunscript\f[R] JavaScript built\-in functions. +.SH OPTIONS FOR THE JRUNSCRIPT COMMAND +.TP +\f[CR]\-cp\f[R] \f[I]path\f[R] or \f[CR]\-classpath\f[R] \f[I]path\f[R] +Indicates where any class files are that the script needs to access. +.TP +\f[CR]\-D\f[R]\f[I]name\f[R]\f[CR]=\f[R]\f[I]value\f[R] +Sets a Java system property. +.TP +\f[CR]\-J\f[R]\f[I]flag\f[R] +Passes \f[I]flag\f[R] directly to the Java Virtual Machine where the +\f[CR]jrunscript\f[R] command is running. +.TP +\f[CR]\-l\f[R] \f[I]language\f[R] +Uses the specified scripting language. +By default, JavaScript is used. +To use other scripting languages, you must specify the corresponding +script engine\(aqs JAR file with the \f[CR]\-cp\f[R] or +\f[CR]\-classpath\f[R] option. +.TP +\f[CR]\-e\f[R] \f[I]script\f[R] +Evaluates the specified script. +This option can be used to run one\-line scripts that are specified +completely on the command line. +.TP +\f[CR]\-encoding\f[R] \f[I]encoding\f[R] +Specifies the character encoding used to read script files. +.TP +\f[CR]\-f\f[R] \f[I]script\-file\f[R] +Evaluates the specified script file (batch mode). +.TP +\f[CR]\-f \-\f[R] +Enters interactive mode to read and evaluate a script from standard +input. +.TP +\f[CR]\-help\f[R] or \f[CR]\-?\f[R] +Displays a help message and exits. +.TP +\f[CR]\-q\f[R] +Lists all script engines available and exits. +.SH ARGUMENTS +If arguments are present and if no \f[CR]\-e\f[R] or \f[CR]\-f\f[R] +option is used, then the first argument is the script file and the rest +of the arguments, if any, are passed as script arguments. +If arguments and the \f[CR]\-e\f[R] or the \f[CR]\-f\f[R] option are +used, then all arguments are passed as script arguments. +If arguments \f[CR]\-e\f[R] and \f[CR]\-f\f[R] are missing, then the +interactive mode is used. +.SH EXAMPLE OF EXECUTING INLINE SCRIPTS +.RS +.PP +\f[CR]jrunscript \-e \(dqprint(\(aqhello world\(aq)\(dq\f[R] +.RE +.RS +.PP +\f[CR]jrunscript \-e \(dqcat(\(aqhttp://www.example.com\(aq)\(dq\f[R] +.RE +.SH EXAMPLE OF USING SPECIFIED LANGUAGE AND EVALUATE THE SCRIPT FILE +.RS +.PP +\f[CR]jrunscript \-l js \-f test.js\f[R] +.RE +.SH EXAMPLE OF INTERACTIVE MODE +.IP +.EX +jrunscript +js> print(\(aqHello World\(rsn\(aq); +Hello World +js> 34 + 55 +89.0 +js> t = new java.lang.Thread(function() { print(\(aqHello World\(rsn\(aq); }) +Thread[Thread\-0,5,main] +js> t.start() +js> Hello World + +js> +.EE +.SH RUN SCRIPT FILE WITH SCRIPT ARGUMENTS +In this example, the \f[CR]test.js\f[R] file is the script file. +The \f[CR]arg1\f[R], \f[CR]arg2\f[R], and \f[CR]arg3\f[R] arguments are +passed to the script. +The script can access these arguments with an arguments array. +.RS +.PP +\f[CR]jrunscript test.js arg1 arg2 arg3\f[R] +.RE diff --git a/man/jshell.1 b/man/jshell.1 new file mode 100644 index 000000000..8812d96d9 --- /dev/null +++ b/man/jshell.1 @@ -0,0 +1,1185 @@ +'\" t +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JSHELL" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jshell \- interactively evaluate declarations, statements, and +expressions of the Java programming language in a read\-eval\-print loop +(REPL) +.SH SYNOPSIS +\f[CR]jshell\f[R] [\f[I]options\f[R]] [\f[I]load\-files\f[R]] +.TP +\f[I]options\f[R] +Command\-line options, separated by spaces. +See \f[B]Options for jshell\f[R]. +.TP +\f[I]load\-files\f[R] +One or more scripts to run when the tool is started. +Scripts can contain any valid code snippets or JShell commands. +.RS +The script can be a local file or one of following predefined scripts: +.TP +\f[CR]DEFAULT\f[R] +Loads the default entries, which are commonly used as imports. +.TP +\f[CR]JAVASE\f[R] +Imports all Java SE packages. +.TP +\f[CR]PRINTING\f[R] +Defines \f[CR]print\f[R], \f[CR]println\f[R], and \f[CR]printf\f[R] as +\f[CR]jshell\f[R] methods for use within the tool. +.TP +\f[CR]TOOLING\f[R] +Defines \f[CR]javac\f[R], \f[CR]jar\f[R], and other methods for running +JDK tools via their command\-line interface within the \f[CR]jshell\f[R] +tool. +For more than one script, use a space to separate the names. +Scripts are run in the order in which they\(aqre entered on the command +line. +Command\-line scripts are run after startup scripts. +To run a script after JShell is started, use the \f[CR]/open\f[R] +command. +To accept input from standard input and suppress the interactive I/O, +enter a hyphen (\-) for \f[I]load\-files\f[R]. +This option enables the use of the \f[CR]jshell\f[R] tool in pipe +chains. +.RE +.SH DESCRIPTION +JShell provides a way to interactively evaluate declarations, +statements, and expressions of the Java programming language, making it +easier to learn the language, explore unfamiliar code and APIs, and +prototype complex code. +Java statements, variable definitions, method definitions, class +definitions, import statements, and expressions are accepted. +The bits of code entered are called snippets. +.PP +As snippets are entered, they\(aqre evaluated, and feedback is provided. +Feedback varies from the results and explanations of actions to nothing, +depending on the snippet entered and the feedback mode chosen. +Errors are described regardless of the feedback mode. +Start with the verbose mode to get the most feedback while learning the +tool. +.PP +Command\-line options are available for configuring the initial +environment when JShell is started. +Within JShell, commands are available for modifying the environment as +needed. +.PP +Existing snippets can be loaded from a file to initialize a JShell +session, or at any time within a session. +Snippets can be modified within the session to try out different +variations and make corrections. +To keep snippets for later use, save them to a file. +.SH OPTIONS FOR JSHELL +.TP +\f[CR]\-\-add\-exports\f[R] \f[I]module\f[R]/\f[I]package\f[R] +Specifies a package to be considered as exported from its defining +module. +.TP +\f[CR]\-\-add\-modules\f[R] \f[I]module\f[R][\f[CR],\f[R]\f[I]module\f[R]...] +Specifies the root modules to resolve in addition to the initial module. +.TP +\f[CR]\-C\f[R]\f[I]flag\f[R] +passes \f[I]flag\f[R] to the Java compiler inside JShell. +For example, \f[CR]\-C\-Xlint\f[R] enables all the recommended lint +warnings, and \f[CR]\-C\-\-release=<N>\f[R] compiles for Java SE N, as +if \-\-release N was specified. +.TP +\f[CR]\-\-class\-path\f[R] \f[I]path\f[R] +Specifies the directories and archives that are searched to locate class +files. +This option overrides the path in the \f[CR]CLASSPATH\f[R] environment +variable. +If the environment variable isn\(aqt set and this option isn\(aqt used, +then the current directory is searched. +For Linux and macOS, use a colon (:) to separate items in the path. +For Windows, use a semicolon (;) to separate items. +.TP +\f[CR]\-\-enable\-preview\f[R] +Allows code to depend on the preview features of this release. +.TP +\f[CR]\-\-execution\f[R] \f[I]specification\f[R] +Specifies an alternate execution engine, where \f[I]specification\f[R] +is an ExecutionControl spec. +See the documentation of the package jdk.jshell.spi for the syntax of +the spec. +.TP +\f[CR]\-\-feedback\f[R] \f[I]mode\f[R] +Sets the initial level of feedback provided in response to what\(aqs +entered. +The initial level can be overridden within a session by using the +\f[CR]/set feedback\f[R] \f[I]mode\f[R] command. +The default is \f[CR]normal\f[R]. +.RS +The following values are valid for \f[I]mode\f[R]: +.TP +\f[CR]verbose\f[R] +Provides detailed feedback for entries. +Additional information about the action performed is displayed after the +result of the action. +The next prompt is separated from the feedback by a blank line. +.TP +\f[CR]normal\f[R] +Provides an average amount of feedback. +The next prompt is separated from the feedback by a blank line. +.TP +\f[CR]concise\f[R] +Provides minimal feedback. +The next prompt immediately follows the code snippet or feedback. +.TP +\f[CR]silent\f[R] +Provides no feedback. +The next prompt immediately follows the code snippet. +.TP +\f[I]custom\f[R] +Provides custom feedback based on how the mode is defined. +Custom feedback modes are created within JShell by using the +\f[CR]/set mode\f[R] command. +.RE +.TP +\f[CR]\-\-help\f[R] or \f[CR]\-h\f[R] or \f[CR]\-?\f[R] +Prints a summary of standard options and exits the tool. +.TP +\f[CR]\-\-help\-extra\f[R] or \f[CR]\-X\f[R] +Prints a summary of nonstandard options and exits the tool. +Nonstandard options are subject to change without notice. +.TP +\f[CR]\-J\f[R]\f[I]flag\f[R] +passes \f[I]flag\f[R] to the runtime system, but has no effect on the +execution of code snippets. +To specify flags that affect the execution of code snippets, use +\f[CR]\-R\f[R]\f[I]flag\f[R]. +Alternatively, use \f[CR]\-J\f[R]\f[I]flag\f[R] with +\f[CR]\-\-execution local\f[R]. +.TP +\f[CR]\-\-module\-path\f[R] \f[I]modulepath\f[R] +Specifies where to find application modules. +For Linux and macOS, use a colon (:) to separate items in the path. +For Windows, use a semicolon (;) to separate items. +.TP +\f[CR]\-\-no\-startup\f[R] +Prevents startup scripts from running when JShell starts. +Use this option to run only the scripts entered on the command line when +JShell is started, or to start JShell without any preloaded information +if no scripts are entered. +This option can\(aqt be used if the \f[CR]\-\-startup\f[R] option is +used. +.TP +\f[CR]\-q\f[R] +Sets the feedback mode to \f[CR]concise\f[R], which is the same as +entering \f[CR]\-\-feedback concise\f[R]. +.TP +\f[CR]\-R\f[R]\f[I]flag\f[R] +passes \f[I]flag\f[R] to the runtime system only when code snippets are +executed. +For example, \f[CR]\-R\-Dfoo=bar\f[R] means that execution of the +snippet \f[CR]System.getProperty(\(dqfoo\(dq)\f[R] will return +\f[CR]\(dqbar\(dq\f[R]. +.TP +\f[CR]\-s\f[R] +Sets the feedback mode to \f[CR]silent\f[R], which is the same as +entering \f[CR]\-\-feedback silent\f[R]. +.TP +\f[CR]\-\-show\-version\f[R] +Prints version information and enters the tool. +.TP +\f[CR]\-\-startup\f[R] \f[I]file\f[R] +Overrides the default startup script for this session. +The script can contain any valid code snippets or commands. +.RS +The script can be a local file or one of the following predefined +scripts: +.TP +\f[CR]DEFAULT\f[R] +Loads the default entries, which are commonly used as imports. +.TP +\f[CR]JAVASE\f[R] +Imports all Java SE packages. +.TP +\f[CR]PRINTING\f[R] +Defines \f[CR]print\f[R], \f[CR]println\f[R], and \f[CR]printf\f[R] as +\f[CR]jshell\f[R] methods for use within the tool. +.TP +\f[CR]TOOLING\f[R] +Defines \f[CR]javac\f[R], \f[CR]jar\f[R], and other methods for running +JDK tools via their command\-line interface within the \f[CR]jshell\f[R] +tool. +For more than one script, provide a separate instance of this option for +each script. +Startup scripts are run when JShell is first started and when the +session is restarted with the \f[CR]/reset\f[R], \f[CR]/reload\f[R], or +\f[CR]/env\f[R] command. +Startup scripts are run in the order in which they\(aqre entered on the +command line. +This option can\(aqt be used if the \f[CR]\-\-no\-startup\f[R] option is +used. +.RE +.TP +\f[CR]\-v\f[R] +Sets the feedback mode to \f[CR]verbose\f[R], which is the same as +entering \f[CR]\-\-feedback verbose\f[R]. +.TP +\f[CR]\-\-version\f[R] +Prints version information and exits the tool. +.SH JSHELL COMMANDS +Within the \f[CR]jshell\f[R] tool, commands are used to modify the +environment and manage code snippets. +.TP +\f[CR]/drop\f[R] {\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]} [{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]}...] +Drops snippets identified by name, ID, or ID range, making them +inactive. +For a range of IDs, provide the starting ID and ending ID separated with +a hyphen. +To provide a list, separate the items in the list with a space. +Use the \f[CR]/list\f[R] command to see the IDs of code snippets. +.TP +\f[CR]/edit\f[R] [\f[I]option\f[R]] +Opens an editor. +If no option is entered, then the editor opens with the active snippets. +.RS +The following options are valid: +.TP +{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]} [{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]}...] +Opens the editor with the snippets identified by name, ID, or ID range. +For a range of IDs, provide the starting ID and ending ID separated with +a hyphen. +To provide a list, separate the items in the list with a space. +Use the \f[CR]/list\f[R] command to see the IDs of code snippets. +.TP +\f[CR]\-all\f[R] +Opens the editor with all snippets, including startup snippets and +snippets that failed, were overwritten, or were dropped. +.TP +\f[CR]\-start\f[R] +Opens the editor with startup snippets that were evaluated when JShell +was started. +To exit edit mode, close the editor window, or respond to the prompt +provided if the \f[CR]\-wait\f[R] option was used when the editor was +set. +Use the \f[CR]/set editor\f[R] command to specify the editor to use. +If no editor is set, then the following environment variables are +checked in order: \f[CR]JSHELLEDITOR\f[R], \f[CR]VISUAL\f[R], and +\f[CR]EDITOR\f[R]. +If no editor is set in JShell and none of the editor environment +variables is set, then a simple default editor is used. +.RE +.TP +\f[CR]/env\f[R] [\f[I]options\f[R]] +Displays the environment settings, or updates the environment settings +and restarts the session. +If no option is entered, then the current environment settings are +displayed. +If one or more options are entered, then the session is restarted as +follows: +.RS +.IP \(bu 2 +Updates the environment settings with the provided options. +.IP \(bu 2 +Resets the execution state. +.IP \(bu 2 +Runs the startup scripts. +.IP \(bu 2 +Silently replays the history in the order entered. +The history includes all valid snippets or \f[CR]/drop\f[R] commands +entered at the \f[CR]jshell\f[R] prompt, in scripts entered on the +command line, or scripts entered with the \f[CR]/open\f[R] command. +Environment settings entered on the command line or provided with a +previous \f[CR]/reset\f[R], \f[CR]/env\f[R], or \f[CR]/reload\f[R] +command are maintained unless an \f[I]option\f[R] is entered that +overwrites the setting. +The following options are valid: +.TP +\f[CR]\-\-add\-modules\f[R] \f[I]module\f[R][\f[CR],\f[R]\f[I]module\f[R]...] +Specifies the root modules to resolve in addition to the initial module. +.TP +\f[CR]\-\-add\-exports\f[R] \f[I]source\-module\f[R]\f[CR]/\f[R]\f[I]package\f[R]\f[CR]=\f[R]\f[I]target\-module\f[R][\f[CR],\f[R]\f[I]target\-module\f[R]]* +Adds an export of \f[I]package\f[R] from \f[I]source\-module\f[R] to +\f[I]target\-module\f[R]. +.TP +\f[CR]\-\-class\-path\f[R] \f[I]path\f[R] +Specifies the directories and archives that are searched to locate class +files. +This option overrides the path in the \f[CR]CLASSPATH\f[R] environment +variable. +If the environment variable isn\(aqt set and this option isn\(aqt used, +then the current directory is searched. +For Linux and macOS, use a colon (\f[CR]:\f[R]) to separate items in the +path. +For Windows, use a semicolon (\f[CR];\f[R]) to separate items. +.TP +\f[CR]\-\-module\-path\f[R] \f[I]modulepath\f[R] +Specifies where to find application modules. +For Linux and macOS, use a colon (\f[CR]:\f[R]) to separate items in the +path. +For Windows, use a semicolon (\f[CR];\f[R]) to separate items. +.RE +.TP +\f[CR]/exit\f[R] [\f[I]integer\-expression\-snippet\f[R]] +Exits the tool. +If no snippet is entered, the exit status is zero. +If a snippet is entered and the result of the snippet is an integer, the +result is used as the exit status. +If an error occurs, or the result of the snippet is not an integer, an +error is displayed and the tool remains active. +.TP +\f[CR]/history\f[R] +Displays what was entered in this session. +.TP +\f[CR]/help\f[R] [\f[I]command\f[R]|\f[I]subject\f[R]] +Displays information about commands and subjects. +If no options are entered, then a summary of information for all +commands and a list of available subjects are displayed. +If a valid command is provided, then expanded information for that +command is displayed. +If a valid subject is entered, then information about that subject is +displayed. +.RS +The following values for \f[I]subject\f[R] are valid: +.TP +\f[CR]context\f[R] +Describes the options that are available for configuring the +environment. +.TP +\f[CR]intro\f[R] +Provides an introduction to the tool. +.TP +\f[CR]shortcuts\f[R] +Describes keystrokes for completing commands and snippets. +See \f[B]Input Shortcuts\f[R]. +.RE +.TP +\f[CR]/imports\f[R] +Displays the current active imports, including those from the startup +scripts and scripts that were entered on the command line when JShell +was started. +.TP +\f[CR]/list\f[R] [\f[I]option\f[R]] +Displays a list of snippets and their IDs. +If no option is entered, then all active snippets are displayed, but +startup snippets aren\(aqt. +.RS +The following options are valid: +.TP +{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]} [{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]}...] +Displays the snippets identified by name, ID, or ID range. +For a range of IDs, provide the starting ID and ending ID separated with +a hyphen. +To provide a list, separate the items in the list with a space. +.TP +\f[CR]\-all\f[R] +Displays all snippets, including startup snippets and snippets that +failed, were overwritten, or were dropped. +IDs that begin with \f[CR]s\f[R] are startup snippets. +IDs that begin with \f[CR]e\f[R] are snippets that failed. +.TP +\f[CR]\-start\f[R] +Displays startup snippets that were evaluated when JShell was started. +.RE +.TP +\f[CR]/methods\f[R] [\f[I]option\f[R]] +Displays information about the methods that were entered. +If no option is entered, then the name, parameter types, and return type +of all active methods are displayed. +.RS +The following options are valid: +.TP +{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]} [{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]}...] +Displays information for methods identified by name, ID, or ID range. +For a range of IDs, provide the starting ID and ending ID separated with +a hyphen. +To provide a list, separate the items in the list with a space. +Use the \f[CR]/list\f[R] command to see the IDs of code snippets. +.TP +\f[CR]\-all\f[R] +Displays information for all methods, including those added when JShell +was started, and methods that failed, were overwritten, or were dropped. +.TP +\f[CR]\-start\f[R] +Displays information for startup methods that were added when JShell was +started. +.RE +.TP +\f[CR]/open\f[R] \f[I]file\f[R] +Opens the script specified and reads the snippets into the tool. +The script can be a local file or one of the following predefined +scripts: +.RS +.TP +\f[CR]DEFAULT\f[R] +Loads the default entries, which are commonly used as imports. +.TP +\f[CR]JAVASE\f[R] +Imports all Java SE packages. +.TP +\f[CR]PRINTING\f[R] +Defines \f[CR]print\f[R], \f[CR]println\f[R], and \f[CR]printf\f[R] as +\f[CR]jshell\f[R] methods for use within the tool. +.TP +\f[CR]TOOLING\f[R] +Defines \f[CR]javac\f[R], \f[CR]jar\f[R], and other methods for running +JDK tools via their command\-line interface within the \f[CR]jshell\f[R] +tool. +.RE +.TP +\f[CR]/reload\f[R] [\f[I]options\f[R]] +Restarts the session as follows: +.RS +.IP \(bu 2 +Updates the environment settings with the provided options, if any. +.IP \(bu 2 +Resets the execution state. +.IP \(bu 2 +Runs the startup scripts. +.IP \(bu 2 +Replays the history in the order entered. +The history includes all valid snippets or \f[CR]/drop\f[R] commands +entered at the \f[CR]jshell\f[R] prompt, in scripts entered on the +command line, or scripts entered with the \f[CR]/open\f[R] command. +Environment settings entered on the command line or provided with a +previous \f[CR]/reset\f[R], \f[CR]/env\f[R], or \f[CR]/reload\f[R] +command are maintained unless an \f[I]option\f[R] is entered that +overwrites the setting. +The following options are valid: +.TP +\f[CR]\-\-add\-modules\f[R] \f[I]module\f[R][\f[CR],\f[R]\f[I]module\f[R]...] +Specifies the root modules to resolve in addition to the initial module. +.TP +\f[CR]\-\-add\-exports\f[R] \f[I]source\-module\f[R]\f[CR]/\f[R]\f[I]package\f[R]\f[CR]=\f[R]\f[I]target\-module\f[R][\f[CR],\f[R]\f[I]target\-module\f[R]]* +Adds an export of \f[I]package\f[R] from \f[I]source\-module\f[R] to +\f[I]target\-module\f[R]. +.TP +\f[CR]\-\-class\-path\f[R] \f[I]path\f[R] +Specifies the directories and archives that are searched to locate class +files. +This option overrides the path in the \f[CR]CLASSPATH\f[R] environment +variable. +If the environment variable isn\(aqt set and this option isn\(aqt used, +then the current directory is searched. +For Linux and macOS, use a colon (\f[CR]:\f[R]) to separate items in the +path. +For Windows, use a semicolon (\f[CR];\f[R]) to separate items. +.TP +\f[CR]\-\-module\-path\f[R] \f[I]modulepath\f[R] +Specifies where to find application modules. +For Linux and macOS, use a colon (\f[CR]:\f[R]) to separate items in the +path. +For Windows, use a semicolon (\f[CR];\f[R]) to separate items. +.TP +\f[CR]\-quiet\f[R] +Replays the valid history without displaying it. +Errors are displayed. +.TP +\f[CR]\-restore\f[R] +Resets the environment to the state at the start of the previous run of +the tool or to the last time a \f[CR]/reset\f[R], \f[CR]/reload\f[R], or +\f[CR]/env\f[R] command was executed in the previous run. +The valid history since that point is replayed. +Use this option to restore a previous JShell session. +.RE +.TP +\f[CR]/reset\f[R] [\f[I]options\f[R]] +Discards all entered snippets and restarts the session as follows: +.RS +.IP \(bu 2 +Updates the environment settings with the provided options, if any. +.IP \(bu 2 +Resets the execution state. +.IP \(bu 2 +Runs the startup scripts. +History is not replayed. +All code that was entered is lost. +Environment settings entered on the command line or provided with a +previous \f[CR]/reset\f[R], \f[CR]/env\f[R], or \f[CR]/reload\f[R] +command are maintained unless an \f[I]option\f[R] is entered that +overwrites the setting. +The following options are valid: +.TP +\f[CR]\-\-add\-modules\f[R] \f[I]module\f[R][\f[CR],\f[R]\f[I]module\f[R]...] +Specifies the root modules to resolve in addition to the initial module. +.TP +\f[CR]\-\-add\-exports\f[R] \f[I]source\-module\f[R]\f[CR]/\f[R]\f[I]package\f[R]\f[CR]=\f[R]\f[I]target\-module\f[R][\f[CR],\f[R]\f[I]target\-module\f[R]]* +Adds an export of \f[I]package\f[R] from \f[I]source\-module\f[R] to +\f[I]target\-module\f[R]. +.TP +\f[CR]\-\-class\-path\f[R] \f[I]path\f[R] +Specifies the directories and archives that are searched to locate class +files. +This option overrides the path in the \f[CR]CLASSPATH\f[R] environment +variable. +If the environment variable isn\(aqt set and this option isn\(aqt used, +then the current directory is searched. +For Linux and macOS, use a colon (\f[CR]:\f[R]) to separate items in the +path. +For Windows, use a semicolon (\f[CR];\f[R]) to separate items. +.TP +\f[CR]\-\-module\-path\f[R] \f[I]modulepath\f[R] +Specifies where to find application modules. +For Linux and macOS, use a colon (\f[CR]:\f[R]) to separate items in the +path. +For Windows, use a semicolon (\f[CR];\f[R]) to separate items. +.RE +.TP +\f[CR]/save\f[R] [\f[I]options\f[R]] \f[I]file\f[R] +Saves snippets and commands to the file specified. +If no options are entered, then active snippets are saved. +.RS +The following options are valid: +.TP +{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]} [{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]}...] +Saves the snippets and commands identified by name, ID, or ID range. +For a range of IDs, provide the starting ID and ending ID separated with +a hyphen. +To provide a list, separate the items in the list with a space. +Use the \f[CR]/list\f[R] command to see the IDs of the code snippets. +.TP +\f[CR]\-all\f[R] +Saves all snippets, including startup snippets and snippets that were +overwritten or failed. +.TP +\f[CR]\-history\f[R] +Saves the sequential history of all commands and snippets entered in the +current session. +.TP +\f[CR]\-start\f[R] +Saves the current startup settings. +If no startup scripts were provided, then an empty file is saved. +.RE +.TP +\f[CR]/set\f[R] [\f[I]setting\f[R]] +Sets configuration information, including the external editor, startup +settings, and feedback mode. +This command is also used to create a custom feedback mode with +customized prompt, format, and truncation values. +If no setting is entered, then the current setting for the editor, +startup settings, and feedback mode are displayed. +.RS +The following values are valid for \f[CR]setting\f[R]: +.TP +\f[CR]editor\f[R] [\f[I]options\f[R]] [\f[I]command\f[R]] +Sets the command used to start an external editor when the +\f[CR]/edit\f[R] command is entered. +The command can include command arguments separated by spaces. +If no command or options are entered, then the current setting is +displayed. +.RS +The following options are valid: +.TP +\f[CR]\-default\f[R] +Sets the editor to the default editor provided with JShell. +This option can\(aqt be used if a command for starting an editor is +entered. +.TP +\f[CR]\-delete\f[R] +Sets the editor to the one in effect when the session started. +If used with the \f[CR]\-retain\f[R] option, then the retained editor +setting is deleted and the editor is set to the first of the following +environment variables found: \f[CR]JSHELLEDITOR\f[R], \f[CR]VISUAL\f[R], +or \f[CR]EDITOR\f[R]. +If none of the editor environment variables are set, then this option +sets the editor to the default editor. +.RS +This option can\(aqt be used if a command for starting an editor is +entered. +.RE +.TP +\f[CR]\-retain\f[R] +Saves the editor setting across sessions. +If no other option or a command is entered, then the current setting is +saved. +.TP +\f[CR]\-wait\f[R] +Prompts the user to indicate when editing is complete. +Otherwise control returns to JShell when the editor exits. +Use this option if the editor being used exits immediately, for example, +when an edit window already exists. +This option is valid only when a command for starting an editor is +entered. +.RE +.TP +\f[CR]feedback\f[R] [\f[I]mode\f[R]] +Sets the feedback mode used to respond to input. +If no mode is entered, then the current mode is displayed. +.RS +The following modes are valid: \f[CR]concise\f[R], \f[CR]normal\f[R], +\f[CR]silent\f[R], \f[CR]verbose\f[R], and any custom mode created with +the \f[CR]/set mode\f[R] command. +.RE +.TP +\f[CR]format\f[R] \f[I]mode\f[R] \f[I]field\f[R] \f[CR]\(dq\f[R]\f[I]format\-string\f[R]\f[CR]\(dq\f[R] \f[I]selector\f[R] +Sets the format of the feedback provided in response to input. +If no mode is entered, then the current formats for all fields for all +feedback modes are displayed. +If only a mode is entered, then the current formats for that mode are +displayed. +If only a mode and field are entered, then the current formats for that +field are displayed. +.RS +To define a format, the following arguments are required: +.TP +\f[I]mode\f[R] +Specifies a feedback mode to which the response format is applied. +Only custom modes created with the \f[CR]/set mode\f[R] command can be +modified. +.TP +\f[I]field\f[R] +Specifies a context\-specific field to which the response format is +applied. +The fields are described in the online help, which is accessed from +JShell using the \f[CR]/help /set format\f[R] command. +.TP +\f[CR]\(dq\f[R]\f[I]format\-string\f[R]\f[CR]\(dq\f[R] +Specifies the string to use as the response format for the specified +field and selector. +The structure of the format string is described in the online help, +which is accessed from JShell using the \f[CR]/help /set format\f[R] +command. +.TP +\f[I]selector\f[R] +Specifies the context in which the response format is applied. +The selectors are described in the online help, which is accessed from +JShell using the \f[CR]/help /set format\f[R] command. +.RE +.TP +\f[CR]mode\f[R] [\f[I]mode\-name\f[R]] [\f[I]existing\-mode\f[R]] [\f[I]options\f[R]] +Creates a custom feedback mode with the mode name provided. +If no mode name is entered, then the settings for all modes are +displayed, which includes the mode, prompt, format, and truncation +settings. +If the name of an existing mode is provided, then the settings from the +existing mode are copied to the mode being created. +.RS +The following options are valid: +.TP +\f[CR]\-command\f[R]|\f[CR]\-quiet\f[R] +Specifies the level of feedback displayed for commands when using the +mode. +This option is required when creating a feedback mode. +Use \f[CR]\-command\f[R] to show information and verification feedback +for commands. +Use \f[CR]\-quiet\f[R] to show only essential feedback for commands, +such as error messages. +.TP +\f[CR]\-delete\f[R] +Deletes the named feedback mode for this session. +The name of the mode to delete is required. +To permanently delete a retained mode, use the \f[CR]\-retain\f[R] +option with this option. +Predefined modes can\(aqt be deleted. +.TP +\f[CR]\-retain\f[R] +Saves the named feedback mode across sessions. +The name of the mode to retain is required. +Configure the new feedback mode using the \f[CR]/set prompt\f[R], +\f[CR]/set format\f[R], and \f[CR]/set truncation\f[R] commands. +To start using the new mode, use the \f[CR]/set feedback\f[R] command. +.RE +.TP +\f[CR]prompt\f[R] \f[I]mode\f[R] \f[CR]\(dq\f[R]\f[I]prompt\-string\f[R]\f[CR]\(dq\f[R] \f[CR]\(dq\f[R]\f[I]continuation\-prompt\-string\f[R]\f[CR]\(dq\f[R] +Sets the prompts for input within JShell. +If no mode is entered, then the current prompts for all feedback modes +are displayed. +If only a mode is entered, then the current prompts for that mode are +displayed. +.RS +To define a prompt, the following arguments are required: +.TP +\f[I]mode\f[R] +Specifies the feedback mode to which the prompts are applied. +Only custom modes created with the \f[CR]/set mode\f[R] command can be +modified. +.TP +\f[CR]\(dq\f[R]\f[I]prompt\-string\f[R]\f[CR]\(dq\f[R] +Specifies the string to use as the prompt for the first line of input. +.TP +\f[CR]\(dq\f[R]\f[I]continuation\-prompt\-string\f[R]\f[CR]\(dq\f[R] +Specifies the string to use as the prompt for the additional input lines +needed to complete a snippet. +.RE +.TP +\f[CR]start\f[R] [\f[CR]\-retain\f[R]] [\f[I]file\f[R] [\f[I]file\f[R]...]|\f[I]option\f[R]] +Sets the names of the startup scripts used when the next +\f[CR]/reset\f[R], \f[CR]/reload\f[R], or \f[CR]/env\f[R] command is +entered. +If more than one script is entered, then the scripts are run in the +order entered. +If no scripts or options are entered, then the current startup settings +are displayed. +.RS +The scripts can be local files or one of the following predefined +scripts: +.TP +\f[CR]DEFAULT\f[R] +Loads the default entries, which are commonly used as imports. +.TP +\f[CR]JAVASE\f[R] +Imports all Java SE packages. +.TP +\f[CR]PRINTING\f[R] +Defines \f[CR]print\f[R], \f[CR]println\f[R], and \f[CR]printf\f[R] as +\f[CR]jshell\f[R] methods for use within the tool. +.TP +\f[CR]TOOLING\f[R] +Defines \f[CR]javac\f[R], \f[CR]jar\f[R], and other methods for running +JDK tools via their command\-line interface within the \f[CR]jshell\f[R] +tool. +The following options are valid: +.TP +\f[CR]\-default\f[R] +Sets the startup settings to the default settings. +.TP +\f[CR]\-none\f[R] +Specifies that no startup settings are used. +Use the \f[CR]\-retain\f[R] option to save the start setting across +sessions. +.RE +.TP +\f[CR]truncation\f[R] \f[I]mode\f[R] \f[I]length\f[R] \f[I]selector\f[R] +Sets the maximum length of a displayed value. +If no mode is entered, then the current truncation values for all +feedback modes are displayed. +If only a mode is entered, then the current truncation values for that +mode are displayed. +.RS +To define truncation values, the following arguments are required: +.TP +\f[I]mode\f[R] +Specifies the feedback mode to which the truncation value is applied. +Only custom modes created with the \f[CR]/set mode\f[R] command can be +modified. +.TP +\f[I]length\f[R] +Specifies the unsigned integer to use as the maximum length for the +specified selector. +.TP +\f[I]selector\f[R] +Specifies the context in which the truncation value is applied. +The selectors are described in the online help, which is accessed from +JShell using the \f[CR]/help /set truncation\f[R] command. +.RE +.RE +.TP +\f[CR]/types\f[R] [\f[I]option\f[R]] +Displays classes, interfaces, and enums that were entered. +If no option is entered, then all current active classes, interfaces, +and enums are displayed. +.RS +The following options are valid: +.TP +{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]} [{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]}...] +Displays information for classes, interfaces, and enums identified by +name, ID, or ID range. +For a range of IDs, provide the starting ID and ending ID separated with +a hyphen. +To provide a list, separate the items in the list with a space. +Use the \f[CR]/list\f[R] command to see the IDs of the code snippets. +.TP +\f[CR]\-all\f[R] +Displays information for all classes, interfaces, and enums, including +those added when JShell was started, and classes, interfaces, and enums +that failed, were overwritten, or were dropped. +.TP +\f[CR]\-start\f[R] +Displays information for startup classes, interfaces, and enums that +were added when JShell was started. +.RE +.TP +\f[CR]/vars\f[R] [\f[I]option\f[R]] +Displays the name, type, and value of variables that were entered. +If no option is entered, then all current active variables are +displayed. +.RS +The following options are valid: +.TP +{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]} [{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]}...] +Displays information for variables identified by name, ID, or ID range. +For a range of IDs, provide the starting ID and ending ID separated with +a hyphen. +To provide a list, separate the items in the list with a space. +Use the \f[CR]/list\f[R] command to see the IDs of the code snippets. +.TP +\f[CR]\-all\f[R] +Displays information for all variables, including those added when +JShell was started, and variables that failed, were overwritten, or were +dropped. +.TP +\f[CR]\-start\f[R] +Displays information for startup variables that were added when JShell +was started. +.RE +.TP +\f[CR]/?\f[R] +Same as the \f[CR]/help\f[R] command. +.TP +\f[CR]/!\f[R] +Reruns the last snippet. +.TP +\f[CR]/\f[R]{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]} [{\f[I]name\f[R]|\f[I]id\f[R]|\f[I]startID\f[R]\f[CR]\-\f[R]\f[I]endID\f[R]}...] +Reruns the snippets identified by ID, range of IDs, or name. +For a range of IDs, provide the starting ID and ending ID separated with +a hyphen. +To provide a list, separate the items in the list with a space. +The first item in the list must be an ID or ID range. +Use the \f[CR]/list\f[R] command to see the IDs of the code snippets. +.TP +\f[CR]/\-\f[R]\f[I]n\f[R] +Reruns the \-\f[I]n\f[R]th previous snippet. +For example, if 15 code snippets were entered, then \f[CR]/\-4\f[R] runs +the 11th snippet. +Commands aren\(aqt included in the count. +.SH INPUT SHORTCUTS +The following shortcuts are available for entering commands and snippets +in JShell. +.SS Tab completion +.TP +\f[B]<tab>\f[R] +When entering snippets, commands, subcommands, command arguments, or +command options, use the Tab key to automatically complete the item. +If the item can\(aqt be determined from what was entered, then possible +options are provided. +.RS +When entering a method call, use the Tab key after the method call\(aqs +opening parenthesis to see the parameters for the method. +If the method has more than one signature, then all signatures are +displayed. +Pressing the Tab key a second time displays the description of the +method and the parameters for the first signature. +Continue pressing the Tab key for a description of any additional +signatures. +.RE +.TP +\f[B]Shift+<Tab> V\f[R] +After entering a complete expression, use this key sequence to convert +the expression to a variable declaration of a type determined by the +type of the expression. +.TP +\f[B]Shift+<Tab> M\f[R] +After entering a complete expression or statement, use this key sequence +to convert the expression or statement to a method declaration. +If an expression is entered, the return type is based on the type of the +expression. +.TP +\f[B]Shift+<Tab> I\f[R] +When an identifier is entered that can\(aqt be resolved, use this key +sequence to show possible imports that resolve the identifier based on +the content of the specified class path. +.SS Command abbreviations +An abbreviation of a command is accepted if the abbreviation uniquely +identifies a command. +For example, \f[CR]/l\f[R] is recognized as the \f[CR]/list\f[R] +command. +However, \f[CR]/s\f[R] isn\(aqt a valid abbreviation because it can\(aqt +be determined if the \f[CR]/set\f[R] or \f[CR]/save\f[R] command is +meant. +Use \f[CR]/se\f[R] for the \f[CR]/set\f[R] command or \f[CR]/sa\f[R] for +the \f[CR]/save\f[R] command. +.PP +Abbreviations are also accepted for subcommands, command arguments, and +command options. +For example, use \f[CR]/m \-a\f[R] to display all methods. +.SS History navigation +A history of what was entered is maintained across sessions. +Use the up and down arrows to scroll through commands and snippets from +the current and past sessions. +Use the Ctrl key with the up and down arrows to skip all but the first +line of multiline snippets. +.SS History search +Use the Ctrl+R key combination to search the history for the string +entered. +The prompt changes to show the string and the match. +Ctrl+R searches backwards from the current location in the history +through earlier entries. +Ctrl+S searches forward from the current location in the history though +later entries. +.SH INPUT EDITING +The editing capabilities of JShell are similar to that of other common +shells. +Keyboard keys and key combinations provide line editing shortcuts. +The Ctrl key and Meta key are used in key combinations. +If your keyboard doesn\(aqt have a Meta key, then the Alt key is often +mapped to provide Meta key functionality. +.PP +Line Editing Shortcuts +.TS +tab(@); +l l. +T{ +Key or Key Combination +T}@T{ +Action +T} +_ +T{ +Return +T}@T{ +Enter the current line. +T} +T{ +Left arrow +T}@T{ +Move the cursor to the left one character. +T} +T{ +Right arrow +T}@T{ +Move the cursor to the right one character. +T} +T{ +Ctrl+A +T}@T{ +Move the cursor to the beginning of the line. +T} +T{ +Ctrl+E +T}@T{ +Move the cursor to the end of the line. +T} +T{ +Meta+B +T}@T{ +Move the cursor to the left one word. +T} +T{ +Meta+F +T}@T{ +Move the cursor to the right one word. +T} +T{ +Delete +T}@T{ +Delete the character under the cursor. +T} +T{ +Backspace +T}@T{ +Delete the character before the cursor. +T} +T{ +Ctrl+K +T}@T{ +Delete the text from the cursor to the end of the line. +T} +T{ +Meta+D +T}@T{ +Delete the text from the cursor to the end of the word. +T} +T{ +Ctrl+W +T}@T{ +Delete the text from the cursor to the previous white space. +T} +T{ +Ctrl+Y +T}@T{ +Paste the most recently deleted text into the line. +T} +T{ +Meta+Y +T}@T{ +After Ctrl+Y, press to cycle through the previously deleted text. +T} +.TE +.SH EXAMPLE OF STARTING AND STOPPING A JSHELL SESSION +JShell is provided with the JDK. +To start a session, enter \f[CR]jshell\f[R] on the command line. +A welcome message is printed, and a prompt for entering commands and +snippets is provided. +.IP +.EX +% jshell +| Welcome to JShell \-\- Version 9 +| For an introduction type: /help intro + +jshell> +.EE +.PP +To see which snippets were automatically loaded when JShell started, use +the \f[CR]/list \-start\f[R] command. +The default startup snippets are import statements for common packages. +The ID for each snippet begins with the letter \f[I]s\f[R], which +indicates it\(aqs a startup snippet. +.IP +.EX +jshell> /list \-start + + s1 : import java.io.*; + s2 : import java.math.*; + s3 : import java.net.*; + s4 : import java.nio.file.*; + s5 : import java.util.*; + s6 : import java.util.concurrent.*; + s7 : import java.util.function.*; + s8 : import java.util.prefs.*; + s9 : import java.util.regex.*; + s10 : import java.util.stream.*; + +jshell> +.EE +.PP +To end the session, use the \f[CR]/exit\f[R] command. +.IP +.EX +jshell> /exit +| Goodbye + +% +.EE +.SH EXAMPLE OF ENTERING SNIPPETS +Snippets are Java statements, variable definitions, method definitions, +class definitions, import statements, and expressions. +Terminating semicolons are automatically added to the end of a completed +snippet if they\(aqre missing. +.PP +The following example shows two variables and a method being defined, +and the method being run. +Note that a scratch variable is automatically created to hold the result +because no variable was provided. +.IP +.EX +jshell> int a=4 +a ==> 4 + +jshell> int b=8 +b ==> 8 + +jshell> int square(int i1) { + ...> return i1 * i1; + ...> } +| created method square(int) + +jshell> square(b) +$5 ==> 64 +.EE +.SH EXAMPLE OF CHANGING SNIPPETS +Change the definition of a variable, method, or class by entering it +again. +.PP +The following examples shows a method being defined and the method run: +.IP +.EX +jshell> String grade(int testScore) { + ...> if (testScore >= 90) { + ...> return \(dqPass\(dq; + ...> } + ...> return \(dqFail\(dq; + ...> } +| created method grade(int) + +jshell> grade(88) +$3 ==> \(dqFail\(dq +.EE +.PP +To change the method \f[CR]grade\f[R] to allow more students to pass, +enter the method definition again and change the pass score to +\f[CR]80\f[R]. +Use the up arrow key to retrieve the previous entries to avoid having to +reenter them and make the change in the \f[CR]if\f[R] statement. +The following example shows the new definition and reruns the method to +show the new result: +.IP +.EX +jshell> String grade(int testScore) { + ...> if (testScore >= 80) { + ...> return \(dqPass\(dq; + ...> } + ...> return \(dqFail\(dq; + ...> } +| modified method grade(int) + +jshell> grade(88) +$5 ==> \(dqPass\(dq +.EE +.PP +For snippets that are more than a few lines long, or to make more than a +few changes, use the \f[CR]/edit\f[R] command to open the snippet in an +editor. +After the changes are complete, close the edit window to return control +to the JShell session. +The following example shows the command and the feedback provided when +the edit window is closed. +The \f[CR]/list\f[R] command is used to show that the pass score was +changed to \f[CR]85\f[R]. +.IP +.EX +jshell> /edit grade +| modified method grade(int) +jshell> /list grade + + 6 : String grade(int testScore) { + if (testScore >= 85) { + return \(dqPass\(dq; + } + return \(dqFail\(dq; + } +.EE +.SH EXAMPLE OF CREATING A CUSTOM FEEDBACK MODE +The feedback mode determines the prompt that\(aqs displayed, the +feedback messages that are provided as snippets are entered, and the +maximum length of a displayed value. +Predefined feedback modes are provided. +Commands for creating custom feedback modes are also provided. +.PP +Use the \f[CR]/set mode\f[R] command to create a new feedback mode. +In the following example, the new mode \f[CR]mymode\f[R], is based on +the predefined feedback mode, \f[CR]normal\f[R], and verifying command +feedback is displayed: +.IP +.EX +jshell> /set mode mymode normal \-command +| Created new feedback mode: mymode +.EE +.PP +Because the new mode is based on the \f[CR]normal\f[R] mode, the prompts +are the same. +The following example shows how to see what prompts are used and then +changes the prompts to custom strings. +The first string represents the standard JShell prompt. +The second string represents the prompt for additional lines in +multiline snippets. +.IP +.EX +jshell> /set prompt mymode +| /set prompt mymode \(dq\(rsnjshell> \(dq \(dq ...> \(dq + +jshell> /set prompt mymode \(dq\(rsnprompt$ \(dq \(dq continue$ \(dq +.EE +.PP +The maximum length of a displayed value is controlled by the truncation +setting. +Different types of values can have different lengths. +The following example sets an overall truncation value of 72, and a +truncation value of 500 for variable value expressions: +.IP +.EX +jshell> /set truncation mymode 72 + +jshell> /set truncation mymode 500 varvalue +.EE +.PP +The feedback displayed after snippets are entered is controlled by the +format setting and is based on the type of snippet entered and the +action taken for that snippet. +In the predefined mode \f[CR]normal\f[R], the string \f[CR]created\f[R] +is displayed when a method is created. +The following example shows how to change that string to +\f[CR]defined\f[R]: +.IP +.EX +jshell> /set format mymode action \(dqdefined\(dq added\-primary +.EE +.PP +Use the \f[CR]/set feedback\f[R] command to start using the feedback +mode that was just created. +The following example shows the custom mode in use: +.IP +.EX +jshell> /set feedback mymode +| Feedback mode: mymode + +prompt$ int square (int num1){ + continue$ return num1*num1; + continue$ } +| defined method square(int) + +prompt$ +.EE diff --git a/man/jstack.1 b/man/jstack.1 new file mode 100644 index 000000000..05c6466d9 --- /dev/null +++ b/man/jstack.1 @@ -0,0 +1,50 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JSTACK" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jstack \- print Java stack traces of Java threads for a specified Java +process +.SH SYNOPSIS +\f[B]Note:\f[R] This command is experimental and unsupported. +.PP +\f[CR]jstack\f[R] [\f[I]options\f[R]] \f[I]pid\f[R] +.TP +\f[I]options\f[R] +This represents the \f[CR]jstack\f[R] command\-line options. +See \f[B]Options for the jstack Command\f[R]. +.TP +\f[I]pid\f[R] +The process ID for which the stack trace is printed. +The process must be a Java process. +To get a list of Java processes running on a machine, use either the +\f[CR]ps\f[R] command or, if the JVM processes are not running in a +separate docker instance, the \f[B]jps\f[R] command. +.SH DESCRIPTION +The \f[CR]jstack\f[R] command prints Java stack traces of Java threads +for a specified Java process. +For each Java frame, the full class name, method name, byte code index +(BCI), and line number, when available, are printed. +C++ mangled names aren\(aqt demangled. +To demangle C++ names, the output of this command can be piped to +\f[CR]c++filt\f[R]. +When the specified process is running on a 64\-bit JVM, you might need +to specify the \f[CR]\-J\-d64\f[R] option, for example: +\f[CR]jstack \-J\-d64\f[R] \f[I]pid\f[R]. +.PP +\f[B]Note:\f[R] +.PP +This command is unsupported and might not be available in future +releases of the JDK. +In Windows Systems where the \f[CR]dbgeng.dll\f[R] file isn\(aqt +present, the Debugging Tools for Windows must be installed so that these +tools work. +The \f[CR]PATH\f[R] environment variable needs to contain the location +of the \f[CR]jvm.dll\f[R] that is used by the target process, or the +location from which the core dump file was produced. +.SH OPTIONS FOR THE JSTACK COMMAND +.TP +\f[CR]\-l\f[R] +The long listing option prints additional information about locks. +.TP +\f[CR]\-h\f[R] or \f[CR]\-help\f[R] +Prints a help message. diff --git a/man/jstat.1 b/man/jstat.1 new file mode 100644 index 000000000..d2f49afcb --- /dev/null +++ b/man/jstat.1 @@ -0,0 +1,510 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JSTAT" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jstat \- monitor JVM statistics +.SH SYNOPSIS +\f[B]Note:\f[R] This command is experimental and unsupported. +.PP +\f[CR]jstat\f[R] \f[I]generalOptions\f[R] +.PP +\f[CR]jstat\f[R] \f[I]outputOptions\f[R] [\f[CR]\-t\f[R]] +[\f[CR]\-h\f[R] \f[I]lines\f[R]] \f[I]vmid\f[R] [\f[I]interval\f[R] +[\f[I]count\f[R]]] +.TP +\f[I]generalOptions\f[R] +A single general command\-line option. +See \f[B]General Options\f[R]. +.TP +\f[I]outputOptions\f[R] +An option reported by the \f[CR]\-options\f[R] option. +One or more output options that consist of a single +\f[CR]statOption\f[R], plus any of the \f[CR]\-t\f[R], \f[CR]\-h\f[R], +and \f[CR]\-J\f[R] options. +See \f[B]Output Options for the jstat Command\f[R]. +.TP +\f[CR]\-t\f[R] +Displays a time\-stamp column as the first column of output. +The time stamp is the time since the start time of the target JVM. +.TP +\f[CR]\-h\f[R] \f[I]n\f[R] +Displays a column header every \f[I]n\f[R] samples (output rows), where +\f[I]n\f[R] is a positive integer. +The default value is \f[CR]0\f[R], which displays the column header of +the first row of data. +.TP +\f[I]vmid\f[R] +A virtual machine identifier, which is a string that indicates the +target JVM. +See \f[B]Virtual Machine Identifier\f[R]. +.TP +\f[I]interval\f[R] +The sampling interval in the specified units, seconds (s) or +milliseconds (ms). +Default units are milliseconds. +This must be a positive integer. +When specified, the \f[CR]jstat\f[R] command produces its output at each +interval. +.TP +\f[I]count\f[R] +The number of samples to display. +The default value is infinity, which causes the \f[CR]jstat\f[R] command +to display statistics until the target JVM terminates or the +\f[CR]jstat\f[R] command is terminated. +This value must be a positive integer. +.SH DESCRIPTION +The \f[CR]jstat\f[R] command displays performance statistics for an +instrumented Java HotSpot VM. +The target JVM is identified by its virtual machine identifier, or +\f[CR]vmid\f[R] option. +.PP +The \f[CR]jstat\f[R] command supports two types of options, general +options and output options. +General options cause the \f[CR]jstat\f[R] command to display simple +usage and version information. +Output options determine the content and format of the statistical +output. +.PP +All options and their functionality are subject to change or removal in +future releases. +.SH GENERAL OPTIONS +If you specify one of the general options, then you can\(aqt specify any +other option or parameter. +.TP +\f[CR]\-help\f[R] +Displays a help message. +.TP +\f[CR]\-options\f[R] +Displays a list of static options. +See \f[B]Output Options for the jstat Command\f[R]. +.SH OUTPUT OPTIONS FOR THE JSTAT COMMAND +If you don\(aqt specify a general option, then you can specify output +options. +Output options determine the content and format of the \f[CR]jstat\f[R] +command\(aqs output, and consist of a single \f[CR]statOption\f[R], plus +any of the other output options (\f[CR]\-h\f[R], \f[CR]\-t\f[R], and +\f[CR]\-J\f[R]). +The \f[CR]statOption\f[R] must come first. +.PP +Output is formatted as a table, with columns that are separated by +spaces. +A header row with titles describes the columns. +Use the \f[CR]\-h\f[R] option to set the frequency at which the header +is displayed. +Column header names are consistent among the different options. +In general, if two options provide a column with the same name, then the +data source for the two columns is the same. +.PP +Use the \f[CR]\-t\f[R] option to display a time\-stamp column, labeled +Timestamp as the first column of output. +The Timestamp column contains the elapsed time, in seconds, since the +target JVM started. +The resolution of the time stamp is dependent on various factors and is +subject to variation due to delayed thread scheduling on heavily loaded +systems. +.PP +Use the interval and count parameters to determine how frequently and +how many times, respectively, the \f[CR]jstat\f[R] command displays its +output. +.PP +\f[B]Note:\f[R] +.PP +Don\(aqt write scripts to parse the \f[CR]jstat\f[R] command\(aqs output +because the format might change in future releases. +If you write scripts that parse the \f[CR]jstat\f[R] command output, +then expect to modify them for future releases of this tool. +.TP +\f[CR]\-statOption\f[R] +Determines the statistics information that the \f[CR]jstat\f[R] command +displays. +The following lists the available options. +Use the \f[CR]\-options\f[R] general option to display the list of +options for a particular platform installation. +See \f[B]Stat Options and Output\f[R]. +.RS +\f[CR]class\f[R]: Displays statistics about the behavior of the class +loader. +\f[CR]compiler\f[R]: Displays statistics about the behavior of the Java +HotSpot VM Just\-in\-Time compiler. +\f[CR]gc\f[R]: Displays statistics about the behavior of the garbage +collected heap. +\f[CR]gccapacity\f[R]: Displays statistics about the capacities of the +generations and their corresponding spaces. +\f[CR]gccause\f[R]: Displays a summary about garbage collection +statistics (same as \f[CR]\-gcutil\f[R]), with the cause of the last and +current (when applicable) garbage collection events. +\f[CR]gcnew\f[R]: Displays statistics about the behavior of the new +generation. +\f[CR]gcnewcapacity\f[R]: Displays statistics about the sizes of the new +generations and their corresponding spaces. +\f[CR]gcold\f[R]: Displays statistics about the behavior of the old +generation and metaspace statistics. +\f[CR]gcoldcapacity\f[R]: Displays statistics about the sizes of the old +generation. +\f[CR]gcmetacapacity\f[R]: Displays statistics about the sizes of the +metaspace. +\f[CR]gcutil\f[R]: Displays a summary about garbage collection +statistics. +\f[CR]printcompilation\f[R]: Displays Java HotSpot VM compilation method +statistics. +.RE +.TP +\f[CR]\-J\f[R]\f[I]javaOption\f[R] +Passes \f[I]javaOption\f[R] to the Java application launcher. +For example, \f[CR]\-J\-Xms48m\f[R] sets the startup memory to 48 MB. +For a complete list of options, see \f[B]java\f[R]. +.SH STAT OPTIONS AND OUTPUT +The following information summarizes the columns that the +\f[CR]jstat\f[R] command outputs for each \f[I]statOption\f[R]. +.TP +\f[CR]\-class\f[R] \f[I]option\f[R] +Class loader statistics. +.RS +\f[CR]Loaded\f[R]: Number of classes loaded. +\f[CR]Bytes\f[R]: Number of KB loaded. +\f[CR]Unloaded\f[R]: Number of classes unloaded. +\f[CR]Bytes\f[R]: Number of KB unloaded. +\f[CR]Time\f[R]: Time spent performing class loading and unloading +operations. +.RE +.TP +\f[CR]\-compiler\f[R] \f[I]option\f[R] +Java HotSpot VM Just\-in\-Time compiler statistics. +.RS +\f[CR]Compiled\f[R]: Number of compilation tasks performed. +\f[CR]Failed\f[R]: Number of compilations tasks failed. +\f[CR]Invalid\f[R]: Number of compilation tasks that were invalidated. +\f[CR]Time\f[R]: Time spent performing compilation tasks. +\f[CR]FailedType\f[R]: Compile type of the last failed compilation. +\f[CR]FailedMethod\f[R]: Class name and method of the last failed +compilation. +.RE +.TP +\f[CR]\-gc\f[R] \f[I]option\f[R] +Garbage collected heap statistics. +.RS +\f[CR]S0C\f[R]: Current survivor space 0 capacity (KB). +\f[CR]S1C\f[R]: Current survivor space 1 capacity (KB). +\f[CR]S0U\f[R]: Survivor space 0 utilization (KB). +\f[CR]S1U\f[R]: Survivor space 1 utilization (KB). +\f[CR]EC\f[R]: Current eden space capacity (KB). +\f[CR]EU\f[R]: Eden space utilization (KB). +\f[CR]OC\f[R]: Current old space capacity (KB). +\f[CR]OU\f[R]: Old space utilization (KB). +\f[CR]MC\f[R]: Metaspace Committed Size (KB). +\f[CR]MU\f[R]: Metaspace utilization (KB). +\f[CR]CCSC\f[R]: Compressed class committed size (KB). +\f[CR]CCSU\f[R]: Compressed class space used (KB). +\f[CR]YGC\f[R]: Number of young generation garbage collection (GC) +events. +\f[CR]YGCT\f[R]: Young generation garbage collection time. +\f[CR]FGC\f[R]: Number of full GC events. +\f[CR]FGCT\f[R]: Full garbage collection time. +\f[CR]GCT\f[R]: Total garbage collection time. +.RE +.TP +\f[CR]\-gccapacity\f[R] \f[I]option\f[R] +Memory pool generation and space capacities. +.RS +\f[CR]NGCMN\f[R]: Minimum new generation capacity (KB). +\f[CR]NGCMX\f[R]: Maximum new generation capacity (KB). +\f[CR]NGC\f[R]: Current new generation capacity (KB). +\f[CR]S0C\f[R]: Current survivor space 0 capacity (KB). +\f[CR]S1C\f[R]: Current survivor space 1 capacity (KB). +\f[CR]EC\f[R]: Current eden space capacity (KB). +\f[CR]OGCMN\f[R]: Minimum old generation capacity (KB). +\f[CR]OGCMX\f[R]: Maximum old generation capacity (KB). +\f[CR]OGC\f[R]: Current old generation capacity (KB). +\f[CR]OC\f[R]: Current old space capacity (KB). +\f[CR]MCMN\f[R]: Minimum metaspace capacity (KB). +\f[CR]MCMX\f[R]: Maximum metaspace capacity (KB). +\f[CR]MC\f[R]: Metaspace Committed Size (KB). +\f[CR]CCSMN\f[R]: Compressed class space minimum capacity (KB). +\f[CR]CCSMX\f[R]: Compressed class space maximum capacity (KB). +\f[CR]CCSC\f[R]: Compressed class committed size (KB). +\f[CR]YGC\f[R]: Number of young generation GC events. +\f[CR]FGC\f[R]: Number of full GC events. +.RE +.TP +\f[CR]\-gccause\f[R] \f[I]option\f[R] +This option displays the same summary of garbage collection statistics +as the \f[CR]\-gcutil\f[R] option, but includes the causes of the last +garbage collection event and (when applicable), the current garbage +collection event. +In addition to the columns listed for \f[CR]\-gcutil\f[R], this option +adds the following columns: +.RS +\f[CR]LGCC\f[R]: Cause of last garbage collection +\f[CR]GCC\f[R]: Cause of current garbage collection +.RE +.TP +\f[CR]\-gcnew\f[R] \f[I]option\f[R] +New generation statistics. +.RS +\f[CR]S0C\f[R]: Current survivor space 0 capacity (KB). +\f[CR]S1C\f[R]: Current survivor space 1 capacity (KB). +\f[CR]S0U\f[R]: Survivor space 0 utilization (KB). +\f[CR]S1U\f[R]: Survivor space 1 utilization (KB). +\f[CR]TT\f[R]: Tenuring threshold. +\f[CR]MTT\f[R]: Maximum tenuring threshold. +\f[CR]DSS\f[R]: Desired survivor size (KB). +\f[CR]EC\f[R]: Current eden space capacity (KB). +\f[CR]EU\f[R]: Eden space utilization (KB). +\f[CR]YGC\f[R]: Number of young generation GC events. +\f[CR]YGCT\f[R]: Young generation garbage collection time. +.RE +.TP +\f[CR]\-gcnewcapacity\f[R] \f[I]option\f[R] +New generation space size statistics. +.RS +\f[CR]NGCMN\f[R]: Minimum new generation capacity (KB). +\f[CR]NGCMX\f[R]: Maximum new generation capacity (KB). +\f[CR]NGC\f[R]: Current new generation capacity (KB). +\f[CR]S0CMX\f[R]: Maximum survivor space 0 capacity (KB). +\f[CR]S0C\f[R]: Current survivor space 0 capacity (KB). +\f[CR]S1CMX\f[R]: Maximum survivor space 1 capacity (KB). +\f[CR]S1C\f[R]: Current survivor space 1 capacity (KB). +\f[CR]ECMX\f[R]: Maximum eden space capacity (KB). +\f[CR]EC\f[R]: Current eden space capacity (KB). +\f[CR]YGC\f[R]: Number of young generation GC events. +\f[CR]FGC\f[R]: Number of full GC events. +.RE +.TP +\f[CR]\-gcold\f[R] \f[I]option\f[R] +Old generation size statistics. +.RS +\f[CR]MC\f[R]: Metaspace Committed Size (KB). +\f[CR]MU\f[R]: Metaspace utilization (KB). +\f[CR]CCSC\f[R]: Compressed class committed size (KB). +\f[CR]CCSU\f[R]: Compressed class space used (KB). +\f[CR]OC\f[R]: Current old space capacity (KB). +\f[CR]OU\f[R]: Old space utilization (KB). +\f[CR]YGC\f[R]: Number of young generation GC events. +\f[CR]FGC\f[R]: Number of full GC events. +\f[CR]FGCT\f[R]: Full garbage collection time. +\f[CR]GCT\f[R]: Total garbage collection time. +.RE +.TP +\f[CR]\-gcoldcapacity\f[R] \f[I]option\f[R] +Old generation statistics. +.RS +\f[CR]OGCMN\f[R]: Minimum old generation capacity (KB). +\f[CR]OGCMX\f[R]: Maximum old generation capacity (KB). +\f[CR]OGC\f[R]: Current old generation capacity (KB). +\f[CR]OC\f[R]: Current old space capacity (KB). +\f[CR]YGC\f[R]: Number of young generation GC events. +\f[CR]FGC\f[R]: Number of full GC events. +\f[CR]FGCT\f[R]: Full garbage collection time. +\f[CR]GCT\f[R]: Total garbage collection time. +.RE +.TP +\f[CR]\-gcmetacapacity\f[R] \f[I]option\f[R] +Metaspace size statistics. +.RS +\f[CR]MCMN\f[R]: Minimum metaspace capacity (KB). +\f[CR]MCMX\f[R]: Maximum metaspace capacity (KB). +\f[CR]MC\f[R]: Metaspace Committed Size (KB). +\f[CR]CCSMN\f[R]: Compressed class space minimum capacity (KB). +\f[CR]CCSMX\f[R]: Compressed class space maximum capacity (KB). +\f[CR]YGC\f[R]: Number of young generation GC events. +\f[CR]FGC\f[R]: Number of full GC events. +\f[CR]FGCT\f[R]: Full garbage collection time. +\f[CR]GCT\f[R]: Total garbage collection time. +.RE +.TP +\f[CR]\-gcutil\f[R] \f[I]option\f[R] +Summary of garbage collection statistics. +.RS +\f[CR]S0\f[R]: Survivor space 0 utilization as a percentage of the +space\(aqs current capacity. +\f[CR]S1\f[R]: Survivor space 1 utilization as a percentage of the +space\(aqs current capacity. +\f[CR]E\f[R]: Eden space utilization as a percentage of the space\(aqs +current capacity. +\f[CR]O\f[R]: Old space utilization as a percentage of the space\(aqs +current capacity. +\f[CR]M\f[R]: Metaspace utilization as a percentage of the space\(aqs +current capacity. +\f[CR]CCS\f[R]: Compressed class space utilization as a percentage. +\f[CR]YGC\f[R]: Number of young generation GC events. +\f[CR]YGCT\f[R]: Young generation garbage collection time. +\f[CR]FGC\f[R]: Number of full GC events. +\f[CR]FGCT\f[R]: Full garbage collection time. +\f[CR]GCT\f[R]: Total garbage collection time. +.RE +.TP +\f[CR]\-printcompilation\f[R] \f[I]option\f[R] +Java HotSpot VM compiler method statistics. +.RS +\f[CR]Compiled\f[R]: Number of compilation tasks performed by the most +recently compiled method. +\f[CR]Size\f[R]: Number of bytes of byte code of the most recently +compiled method. +\f[CR]Type\f[R]: Compilation type of the most recently compiled method. +\f[CR]Method\f[R]: Class name and method name identifying the most +recently compiled method. +Class name uses a slash (/) instead of a dot (.) +as a name space separator. +The method name is the method within the specified class. +The format for these two fields is consistent with the HotSpot +\f[CR]\-XX:+PrintCompilation\f[R] option. +.RE +.SH VIRTUAL MACHINE IDENTIFIER +The syntax of the \f[CR]vmid\f[R] string corresponds to the syntax of a +URI: +.RS +.PP +[\f[I]protocol\f[R]\f[CR]:\f[R]][\f[CR]//\f[R]]\f[I]lvmid\f[R][\f[CR]\(at\f[R]\f[I]hostname\f[R][\f[CR]:\f[R]\f[I]port\f[R]][\f[CR]/\f[R]\f[I]servername\f[R]] +.RE +.PP +The syntax of the \f[CR]vmid\f[R] string corresponds to the syntax of a +URI. +The \f[CR]vmid\f[R] string can vary from a simple integer that +represents a local JVM to a more complex construction that specifies a +communications protocol, port number, and other implementation\-specific +values. +.TP +\f[I]protocol\f[R] +The communications protocol. +If the \f[I]protocol\f[R] value is omitted and a host name isn\(aqt +specified, then the default protocol is a platform\-specific optimized +local protocol. +If the \f[I]protocol\f[R] value is omitted and a host name is specified, +then the default protocol is \f[CR]rmi\f[R]. +.TP +\f[I]lvmid\f[R] +The local virtual machine identifier for the target JVM. +The \f[I]lvmid\f[R] is a platform\-specific value that uniquely +identifies a JVM on a system. +The \f[I]lvmid\f[R] is the only required component of a virtual machine +identifier. +The \f[I]lvmid\f[R] is typically, but not necessarily, the operating +system\(aqs process identifier for the target JVM process. +You can use the \f[CR]jps\f[R] command to determine the \f[I]lvmid\f[R] +provided the JVM processes is not running in a separate docker instance. +You can also determine the \f[I]lvmid\f[R] on Linux and macOS platforms +with the \f[CR]ps\f[R] command, and on Windows with the Windows Task +Manager. +.TP +\f[I]hostname\f[R] +A host name or IP address that indicates the target host. +If the \f[I]hostname\f[R] value is omitted, then the target host is the +local host. +.TP +\f[I]port\f[R] +The default port for communicating with the remote server. +If the \f[I]hostname\f[R] value is omitted or the \f[I]protocol\f[R] +value specifies an optimized, local protocol, then the \f[I]port\f[R] +value is ignored. +Otherwise, treatment of the \f[I]port\f[R] parameter is +implementation\-specific. +For the default \f[CR]rmi\f[R] protocol, the port value indicates the +port number for the \f[CR]rmiregistry\f[R] on the remote host. +If the \f[I]port\f[R] value is omitted and the \f[I]protocol\f[R] value +indicates \f[CR]rmi\f[R], then the default rmiregistry port (1099) is +used. +.TP +\f[I]servername\f[R] +The treatment of the \f[I]servername\f[R] parameter depends on +implementation. +For the optimized local protocol, this field is ignored. +For the \f[CR]rmi\f[R] protocol, it represents the name of the RMI +remote object on the remote host. +.SH EXAMPLES +This section presents some examples of monitoring a local JVM with an +\f[I]lvmid\f[R] of 21891. +.SH THE GCUTIL OPTION +This example attaches to lvmid 21891 and takes 7 samples at 250 +millisecond intervals and displays the output as specified by the +\f[CR]\-gcutil\f[R] option. +.PP +The output of this example shows that a young generation collection +occurred between the third and fourth sample. +The collection took 0.078 seconds and promoted objects from the eden +space (E) to the old space (O), resulting in an increase of old space +utilization from 66.80% to 68.19%. +Before the collection, the survivor space was 97.02% utilized, but after +this collection it\(aqs 91.03% utilized. +.IP +.EX +jstat \-gcutil 21891 250 7 + S0 S1 E O M CCS YGC YGCT FGC FGCT GCT + 0.00 97.02 70.31 66.80 95.52 89.14 7 0.300 0 0.000 0.300 + 0.00 97.02 86.23 66.80 95.52 89.14 7 0.300 0 0.000 0.300 + 0.00 97.02 96.53 66.80 95.52 89.14 7 0.300 0 0.000 0.300 + 91.03 0.00 1.98 68.19 95.89 91.24 8 0.378 0 0.000 0.378 + 91.03 0.00 15.82 68.19 95.89 91.24 8 0.378 0 0.000 0.378 + 91.03 0.00 17.80 68.19 95.89 91.24 8 0.378 0 0.000 0.378 + 91.03 0.00 17.80 68.19 95.89 91.24 8 0.378 0 0.000 0.378 +.EE +.SH REPEAT THE COLUMN HEADER STRING +This example attaches to lvmid 21891 and takes samples at 250 +millisecond intervals and displays the output as specified by +\f[CR]\-gcnew\f[R] option. +In addition, it uses the \f[CR]\-h3\f[R] option to output the column +header after every 3 lines of data. +.PP +In addition to showing the repeating header string, this example shows +that between the second and third samples, a young GC occurred. +Its duration was 0.001 seconds. +The collection found enough active data that the survivor space 0 +utilization (S0U) would have exceeded the desired survivor size (DSS). +As a result, objects were promoted to the old generation (not visible in +this output), and the tenuring threshold (TT) was lowered from 31 to 2. +.PP +Another collection occurs between the fifth and sixth samples. +This collection found very few survivors and returned the tenuring +threshold to 31. +.IP +.EX +jstat \-gcnew \-h3 21891 250 + S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT + 64.0 64.0 0.0 31.7 31 31 32.0 512.0 178.6 249 0.203 + 64.0 64.0 0.0 31.7 31 31 32.0 512.0 355.5 249 0.203 + 64.0 64.0 35.4 0.0 2 31 32.0 512.0 21.9 250 0.204 + S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT + 64.0 64.0 35.4 0.0 2 31 32.0 512.0 245.9 250 0.204 + 64.0 64.0 35.4 0.0 2 31 32.0 512.0 421.1 250 0.204 + 64.0 64.0 0.0 19.0 31 31 32.0 512.0 84.4 251 0.204 + S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT + 64.0 64.0 0.0 19.0 31 31 32.0 512.0 306.7 251 0.204 +.EE +.SH INCLUDE A TIME STAMP FOR EACH SAMPLE +This example attaches to lvmid 21891 and takes 3 samples at 250 +millisecond intervals. +The \f[CR]\-t\f[R] option is used to generate a time stamp for each +sample in the first column. +.PP +The Timestamp column reports the elapsed time in seconds since the start +of the target JVM. +In addition, the \f[CR]\-gcoldcapacity\f[R] output shows the old +generation capacity (OGC) and the old space capacity (OC) increasing as +the heap expands to meet allocation or promotion demands. +The old generation capacity (OGC) has grown from 11,696 KB to 13,820 KB +after the eighty\-first full garbage collection (FGC). +The maximum capacity of the generation (and space) is 60,544 KB (OGCMX), +so it still has room to expand. +.IP +.EX +Timestamp OGCMN OGCMX OGC OC YGC FGC FGCT GCT + 150.1 1408.0 60544.0 11696.0 11696.0 194 80 2.874 3.799 + 150.4 1408.0 60544.0 13820.0 13820.0 194 81 2.938 3.863 + 150.7 1408.0 60544.0 13820.0 13820.0 194 81 2.938 3.863 +.EE +.SH MONITOR INSTRUMENTATION FOR A REMOTE JVM +This example attaches to lvmid 40496 on the system named +\f[CR]remote.domain\f[R] using the \f[CR]\-gcutil\f[R] option, with +samples taken every second indefinitely. +.PP +The lvmid is combined with the name of the remote host to construct a +vmid of \f[CR]40496\(atremote.domain\f[R]. +This vmid results in the use of the \f[CR]rmi\f[R] protocol to +communicate to the default \f[CR]jstatd\f[R] server on the remote host. +The \f[CR]jstatd\f[R] server is located using the \f[CR]rmiregistry\f[R] +command on \f[CR]remote.domain\f[R] that\(aqs bound to the default port +of the \f[CR]rmiregistry\f[R] command (port 1099). +.IP +.EX +jstat \-gcutil 40496\(atremote.domain 1000 +\&... output omitted +.EE diff --git a/man/jstatd.1 b/man/jstatd.1 new file mode 100644 index 000000000..014cb4de9 --- /dev/null +++ b/man/jstatd.1 @@ -0,0 +1,165 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JSTATD" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jstatd \- monitor the creation and termination of instrumented Java +HotSpot VMs +.SH SYNOPSIS +\f[B]WARNING:\f[R] This command is experimental, unsupported, and +deprecated. +It will be removed in a future release. +.PP +\f[CR]jstatd\f[R] [\f[I]options\f[R]] +.TP +\f[I]options\f[R] +This represents the \f[CR]jstatd\f[R] command\-line options. +See \f[B]Options for the jstatd Command\f[R]. +.SH DESCRIPTION +The \f[CR]jstatd\f[R] command is an RMI server application that monitors +for the creation and termination of instrumented Java HotSpot VMs and +provides an interface to enable remote monitoring tools, +\f[CR]jstat\f[R] and \f[CR]jps\f[R], to attach to JVMs that are running +on the local host and collect information about the JVM process. +.PP +The \f[CR]jstatd\f[R] server requires an RMI registry on the local host. +The \f[CR]jstatd\f[R] server attempts to attach to the RMI registry on +the default port, or on the port you specify with the \f[CR]\-p\f[R] +\f[CR]port\f[R] option. +If an RMI registry is not found, then one is created within the +\f[CR]jstatd\f[R] application that\(aqs bound to the port that\(aqs +indicated by the \f[CR]\-p\f[R] \f[CR]port\f[R] option or to the default +RMI registry port when the \f[CR]\-p\f[R] \f[CR]port\f[R] option is +omitted. +You can stop the creation of an internal RMI registry by specifying the +\f[CR]\-nr\f[R] option. +.SH OPTIONS FOR THE JSTATD COMMAND +.TP +\f[CR]\-nr\f[R] +This option does not attempt to create an internal RMI registry within +the \f[CR]jstatd\f[R] process when an existing RMI registry isn\(aqt +found. +.TP +\f[CR]\-p\f[R] \f[I]port\f[R] +This option sets the port number where the RMI registry is expected to +be found, or when not found, created if the \f[CR]\-nr\f[R] option +isn\(aqt specified. +.TP +\f[CR]\-r\f[R] \f[I]rmiport\f[R] +This option sets the port number to which the RMI connector is bound. +If not specified a random available port is used. +.TP +\f[CR]\-n\f[R] \f[I]rminame\f[R] +This option sets the name to which the remote RMI object is bound in the +RMI registry. +The default name is \f[CR]JStatRemoteHost\f[R]. +If multiple \f[CR]jstatd\f[R] servers are started on the same host, then +the name of the exported RMI object for each server can be made unique +by specifying this option. +However, doing so requires that the unique server name be included in +the monitoring client\(aqs \f[CR]hostid\f[R] and \f[CR]vmid\f[R] +strings. +.TP +\f[CR]\-J\f[R]\f[I]option\f[R] +This option passes a Java \f[CR]option\f[R] to the JVM, where the option +is one of those described on the reference page for the Java application +launcher. +For example, \f[CR]\-J\-Xms48m\f[R] sets the startup memory to 48 MB. +See \f[B]java\f[R]. +.SH SECURITY +The \f[CR]jstatd\f[R] server can monitor only JVMs for which it has the +appropriate native access permissions. +Therefore, the \f[CR]jstatd\f[R] process must be running with the same +user credentials as the target JVMs. +Some user credentials, such as the root user in Linux and macOS +operating systems, have permission to access the instrumentation +exported by any JVM on the system. +A \f[CR]jstatd\f[R] process running with such credentials can monitor +any JVM on the system, but introduces additional security concerns. +.PP +The \f[CR]jstatd\f[R] server doesn\(aqt provide any authentication of +remote clients. +Therefore, running a \f[CR]jstatd\f[R] server process exposes the +instrumentation export by all JVMs for which the \f[CR]jstatd\f[R] +process has access permissions to any user on the network. +This exposure might be undesirable in your environment, and therefore, +local security policies should be considered before you start the +\f[CR]jstatd\f[R] process, particularly in production environments or on +networks that aren\(aqt secure. +.PP +For security purposes, the \f[CR]jstatd\f[R] server uses an RMI +ObjectInputFilter to allow only essential classes to be deserialized. +.PP +If your security concerns can\(aqt be addressed, then the safest action +is to not run the \f[CR]jstatd\f[R] server and use the \f[CR]jstat\f[R] +and \f[CR]jps\f[R] tools locally. +However, when using \f[CR]jps\f[R] to get a list of instrumented JVMs, +the list will not include any JVMs running in docker containers. +.SH REMOTE INTERFACE +The interface exported by the \f[CR]jstatd\f[R] process is proprietary +and guaranteed to change. +Users and developers are discouraged from writing to this interface. +.SH EXAMPLES +The following are examples of the \f[CR]jstatd\f[R] command. +The \f[CR]jstatd\f[R] scripts automatically start the server in the +background. +.SH INTERNAL RMI REGISTRY +This example shows how to start a \f[CR]jstatd\f[R] session with an +internal RMI registry. +This example assumes that no other server is bound to the default RMI +registry port (port \f[CR]1099\f[R]). +.RS +.PP +\f[CR]jstatd\f[R] +.RE +.SH EXTERNAL RMI REGISTRY +This example starts a \f[CR]jstatd\f[R] session with an external RMI +registry. +.IP +.EX +rmiregistry& +jstatd +.EE +.PP +This example starts a \f[CR]jstatd\f[R] session with an external RMI +registry server on port \f[CR]2020\f[R]. +.IP +.EX +jrmiregistry 2020& +jstatd \-p 2020 +.EE +.PP +This example starts a \f[CR]jstatd\f[R] session with an external RMI +registry server on port \f[CR]2020\f[R] and JMX connector bound to port +\f[CR]2021\f[R]. +.IP +.EX +jrmiregistry 2020& +jstatd \-p 2020 \-r 2021 +.EE +.PP +This example starts a \f[CR]jstatd\f[R] session with an external RMI +registry on port 2020 that\(aqs bound to +\f[CR]AlternateJstatdServerName\f[R]. +.IP +.EX +rmiregistry 2020& +jstatd \-p 2020 \-n AlternateJstatdServerName +.EE +.SH STOP THE CREATION OF AN IN\-PROCESS RMI REGISTRY +This example starts a \f[CR]jstatd\f[R] session that doesn\(aqt create +an RMI registry when one isn\(aqt found. +This example assumes an RMI registry is already running. +If an RMI registry isn\(aqt running, then an error message is displayed. +.RS +.PP +\f[CR]jstatd \-nr\f[R] +.RE +.SH ENABLE RMI LOGGING +This example starts a \f[CR]jstatd\f[R] session with RMI logging +capabilities enabled. +This technique is useful as a troubleshooting aid or for monitoring +server activities. +.RS +.PP +\f[CR]jstatd \-J\-Djava.rmi.server.logCalls=true\f[R] +.RE diff --git a/man/jwebserver.1 b/man/jwebserver.1 new file mode 100644 index 000000000..9f0784d60 --- /dev/null +++ b/man/jwebserver.1 @@ -0,0 +1,138 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "JWEBSERVER" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +jwebserver \- launch the Java Simple Web Server +.SH SYNOPSIS +\f[CR]jwebserver\f[R] [\f[I]options\f[R]] +.TP +\f[I]options\f[R] +Command\-line options. +For a detailed description of the options, see \f[B]Options\f[R]. +.SH DESCRIPTION +The \f[CR]jwebserver\f[R] tool provides a minimal HTTP server, designed +to be used for prototyping, testing, and debugging. +It serves a single directory hierarchy, and only serves static files. +Only HTTP/1.1 is supported; HTTP/2 and HTTPS are not supported. +.PP +Only idempotent HEAD and GET requests are served. +Any other requests receive a \f[CR]501 \- Not Implemented\f[R] or a +\f[CR]405 \- Not Allowed\f[R] response. +GET requests are mapped to the directory being served, as follows: +.IP \(bu 2 +If the requested resource is a file, its content is served. +.IP \(bu 2 +If the requested resource is a directory that contains an index file, +the content of the index file is served. +.IP \(bu 2 +Otherwise, the names of all files and subdirectories of the directory +are listed. +Symbolic links and hidden files are not listed or served. +.PP +MIME types are configured automatically, using the built\-in table. +For example, \f[CR].html\f[R] files are served as \f[CR]text/html\f[R] +and \f[CR].java\f[R] files are served as \f[CR]text/plain\f[R]. +.PP +\f[CR]jwebserver\f[R] is located in the jdk.httpserver module, and can +alternatively be started with \f[CR]java \-m jdk.httpserver\f[R]. +It is based on the web server implementation in the +\f[CR]com.sun.net.httpserver\f[R] package. +The \f[CR]com.sun.net.httpserver.SimpleFileServer\f[R] class provides a +programmatic way to retrieve the server and its components for reuse and +extension. +.SH USAGE +.IP +.EX +jwebserver [\-b bind address] [\-p port] [\-d directory] + [\-o none|info|verbose] [\-h to show options] + [\-version to show version information] +.EE +.SH OPTIONS +.TP +\f[CR]\-h\f[R] or \f[CR]\-?\f[R] or \f[CR]\-\-help\f[R] +Prints the help message and exits. +.TP +\f[CR]\-b\f[R] \f[I]addr\f[R] or \f[CR]\-\-bind\-address\f[R] \f[I]addr\f[R] +Specifies the address to bind to. +Default: 127.0.0.1 or ::1 (loopback). +For all interfaces use \f[CR]\-b 0.0.0.0\f[R] or \f[CR]\-b ::\f[R]. +.TP +\f[CR]\-d\f[R] \f[I]dir\f[R] or \f[CR]\-\-directory\f[R] \f[I]dir\f[R] +Specifies the directory to serve. +Default: current directory. +.TP +\f[CR]\-o\f[R] \f[I]level\f[R] or \f[CR]\-\-output\f[R] \f[I]level\f[R] +Specifies the output format. +\f[CR]none\f[R] | \f[CR]info\f[R] | \f[CR]verbose\f[R]. +Default: \f[CR]info\f[R]. +.TP +\f[CR]\-p\f[R] \f[I]port\f[R] or \f[CR]\-\-port\f[R] \f[I]port\f[R] +Specifies the port to listen on. +Default: 8000. +.TP +\f[CR]\-version\f[R] or \f[CR]\-\-version\f[R] +Prints the version information and exits. +.PP +To stop the server, press \f[CR]Ctrl + C\f[R]. +.SH STARTING THE SERVER +The following command starts the Simple Web Server: +.IP +.EX +$ jwebserver +.EE +.PP +If startup is successful, the server prints a message to +\f[CR]System.out\f[R] listing the local address and the absolute path of +the directory being served. +For example: +.IP +.EX +$ jwebserver +Binding to loopback by default. For all interfaces use \(dq\-b 0.0.0.0\(dq or \(dq\-b ::\(dq. +Serving /cwd and subdirectories on 127.0.0.1 port 8000 +URL http://127.0.0.1:8000/ +.EE +.SH CONFIGURATION +By default, the server runs in the foreground and binds to the loopback +address and port 8000. +This can be changed with the \f[CR]\-b\f[R] and \f[CR]\-p\f[R] options. +For example, to bind the Simple Web Server to all interfaces, use: +.IP +.EX +$ jwebserver \-b 0.0.0.0 +Serving /cwd and subdirectories on 0.0.0.0 (all interfaces) port 8000 +URL http://123.456.7.891:8000/ +.EE +.PP +Note that this makes the web server accessible to all hosts on the +network. +\f[I]Do not do this unless you are sure the server cannot leak any +sensitive information.\f[R] +.PP +As another example, use the following command to run on port 9000: +.IP +.EX +$ jwebserver \-p 9000 +.EE +.PP +By default, the files of the current directory are served. +A different directory can be specified with the \f[CR]\-d\f[R] option. +.PP +By default, every request is logged on the console. +The output looks like this: +.IP +.EX +127.0.0.1 \- \- [10/Feb/2021:14:34:11 +0000] \(dqGET /some/subdirectory/ HTTP/1.1\(dq 200 \- +.EE +.PP +Logging output can be changed with the \f[CR]\-o\f[R] option. +The default setting is \f[CR]info\f[R]. +The \f[CR]verbose\f[R] setting additionally includes the request and +response headers as well as the absolute path of the requested resource. +.SH STOPPING THE SERVER +Once started successfully, the server runs until it is stopped. +On Unix platforms, the server can be stopped by sending it a +\f[CR]SIGINT\f[R] signal (\f[CR]Ctrl+C\f[R] in a terminal window). +.SH HELP OPTION +The \f[CR]\-h\f[R] option displays a help message describing the usage +and the options of the \f[CR]jwebserver\f[R]. diff --git a/man/keytool.1 b/man/keytool.1 new file mode 100644 index 000000000..4bd3f1aad --- /dev/null +++ b/man/keytool.1 @@ -0,0 +1,2804 @@ +'\" t +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "KEYTOOL" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +keytool \- a key and certificate management utility +.SH SYNOPSIS +\f[CR]keytool\f[R] [\f[I]commands\f[R]] +.TP +\f[I]commands\f[R] +Commands for \f[CR]keytool\f[R] include the following: +.RS +.IP \(bu 2 +\f[CR]\-certreq\f[R]: Generates a certificate request +.IP \(bu 2 +\f[CR]\-changealias\f[R]: Changes an entry\(aqs alias +.IP \(bu 2 +\f[CR]\-delete\f[R]: Deletes an entry +.IP \(bu 2 +\f[CR]\-exportcert\f[R]: Exports certificate +.IP \(bu 2 +\f[CR]\-genkeypair\f[R]: Generates a key pair +.IP \(bu 2 +\f[CR]\-genseckey\f[R]: Generates a secret key +.IP \(bu 2 +\f[CR]\-gencert\f[R]: Generates a certificate from a certificate request +.IP \(bu 2 +\f[CR]\-importcert\f[R]: Imports a certificate or a certificate chain +.IP \(bu 2 +\f[CR]\-importpass\f[R]: Imports a password +.IP \(bu 2 +\f[CR]\-importkeystore\f[R]: Imports one or all entries from another +keystore +.IP \(bu 2 +\f[CR]\-keypasswd\f[R]: Changes the key password of an entry +.IP \(bu 2 +\f[CR]\-list\f[R]: Lists entries in a keystore +.IP \(bu 2 +\f[CR]\-printcert\f[R]: Prints the content of a certificate +.IP \(bu 2 +\f[CR]\-printcertreq\f[R]: Prints the content of a certificate request +.IP \(bu 2 +\f[CR]\-printcrl\f[R]: Prints the content of a Certificate Revocation +List (CRL) file +.IP \(bu 2 +\f[CR]\-storepasswd\f[R]: Changes the store password of a keystore +.IP \(bu 2 +\f[CR]\-showinfo\f[R]: Displays security\-related information +.IP \(bu 2 +\f[CR]\-version\f[R]: Prints the program version +See \f[B]Commands and Options\f[R] for a description of these commands +with their options. +.RE +.SH DESCRIPTION +The \f[CR]keytool\f[R] command is a key and certificate management +utility. +It enables users to administer their own public/private key pairs and +associated certificates for use in self\-authentication (where a user +authenticates themselves to other users and services) or data integrity +and authentication services, by using digital signatures. +The \f[CR]keytool\f[R] command also enables users to cache the public +keys (in the form of certificates) of their communicating peers. +.PP +A certificate is a digitally signed statement from one entity (person, +company, and so on), which says that the public key (and some other +information) of some other entity has a particular value. +When data is digitally signed, the signature can be verified to check +the data integrity and authenticity. +Integrity means that the data hasn\(aqt been modified or tampered with, +and authenticity means that the data comes from the individual who +claims to have created and signed it. +.PP +The \f[CR]keytool\f[R] command also enables users to administer secret +keys and passphrases used in symmetric encryption and decryption (Data +Encryption Standard). +It can also display other security\-related information. +.PP +The \f[CR]keytool\f[R] command stores the keys and certificates in a +keystore. +.PP +The \f[CR]keytool\f[R] command uses the +\f[CR]jdk.certpath.disabledAlgorithms\f[R] and +\f[CR]jdk.security.legacyAlgorithms\f[R] security properties to +determine which algorithms are considered a security risk. +It emits warnings when disabled or legacy algorithms are being used. +The \f[CR]jdk.certpath.disabledAlgorithms\f[R] and +\f[CR]jdk.security.legacyAlgorithms\f[R] security properties are defined +in the \f[CR]java.security\f[R] file (located in the JDK\(aqs +\f[CR]$JAVA_HOME/conf/security\f[R] directory). +.SH COMMAND AND OPTION NOTES +The following notes apply to the descriptions in \f[B]Commands and +Options\f[R]: +.IP \(bu 2 +All command and option names are preceded by a hyphen sign +(\f[CR]\-\f[R]). +.IP \(bu 2 +Only one command can be provided. +.IP \(bu 2 +Options for each command can be provided in any order. +.IP \(bu 2 +There are two kinds of options, one is single\-valued which should be +only provided once. +If a single\-valued option is provided multiple times, the value of the +last one is used. +The other type is multi\-valued, which can be provided multiple times +and all values are used. +The only multi\-valued option currently supported is the +\f[CR]\-ext\f[R] option used to generate X.509v3 certificate extensions. +.IP \(bu 2 +All items not italicized or in braces ({ }) or brackets ([ ]) are +required to appear as is. +.IP \(bu 2 +Braces surrounding an option signify that a default value is used when +the option isn\(aqt specified on the command line. +Braces are also used around the \f[CR]\-v\f[R], \f[CR]\-rfc\f[R], and +\f[CR]\-J\f[R] options, which have meaning only when they appear on the +command line. +They don\(aqt have any default values. +.IP \(bu 2 +Brackets surrounding an option signify that the user is prompted for the +values when the option isn\(aqt specified on the command line. +For the \f[CR]\-keypass\f[R] option, if you don\(aqt specify the option +on the command line, then the \f[CR]keytool\f[R] command first attempts +to use the keystore password to recover the private/secret key. +If this attempt fails, then the \f[CR]keytool\f[R] command prompts you +for the private/secret key password. +.IP \(bu 2 +Items in italics (option values) represent the actual values that must +be supplied. +For example, here is the format of the \f[CR]\-printcert\f[R] command: +.RS 2 +.RS +.PP +\f[CR]keytool \-printcert\f[R] {\f[CR]\-file\f[R] \f[I]cert_file\f[R]} +{\f[CR]\-v\f[R]} +.RE +.PP +When you specify a \f[CR]\-printcert\f[R] command, replace +\f[I]cert_file\f[R] with the actual file name, as follows: +\f[CR]keytool \-printcert \-file VScert.cer\f[R] +.RE +.IP \(bu 2 +Option values must be enclosed in quotation marks when they contain a +blank (space). +.SH COMMANDS AND OPTIONS +The keytool commands and their options can be grouped by the tasks that +they perform. +.PP +\f[B]Commands for Creating or Adding Data to the Keystore\f[R]: +.IP \(bu 2 +\f[CR]\-gencert\f[R] +.IP \(bu 2 +\f[CR]\-genkeypair\f[R] +.IP \(bu 2 +\f[CR]\-genseckey\f[R] +.IP \(bu 2 +\f[CR]\-importcert\f[R] +.IP \(bu 2 +\f[CR]\-importpass\f[R] +.PP +\f[B]Commands for Importing Contents from Another Keystore\f[R]: +.IP \(bu 2 +\f[CR]\-importkeystore\f[R] +.PP +\f[B]Commands for Generating a Certificate Request\f[R]: +.IP \(bu 2 +\f[CR]\-certreq\f[R] +.PP +\f[B]Commands for Exporting Data\f[R]: +.IP \(bu 2 +\f[CR]\-exportcert\f[R] +.PP +\f[B]Commands for Displaying Data\f[R]: +.IP \(bu 2 +\f[CR]\-list\f[R] +.IP \(bu 2 +\f[CR]\-printcert\f[R] +.IP \(bu 2 +\f[CR]\-printcertreq\f[R] +.IP \(bu 2 +\f[CR]\-printcrl\f[R] +.PP +\f[B]Commands for Managing the Keystore\f[R]: +.IP \(bu 2 +\f[CR]\-storepasswd\f[R] +.IP \(bu 2 +\f[CR]\-keypasswd\f[R] +.IP \(bu 2 +\f[CR]\-delete\f[R] +.IP \(bu 2 +\f[CR]\-changealias\f[R] +.PP +\f[B]Commands for Displaying Security\-related Information\f[R]: +.IP \(bu 2 +\f[CR]\-showinfo\f[R] +.PP +\f[B]Commands for Displaying Program Version\f[R]: +.IP \(bu 2 +\f[CR]\-version\f[R] +.SH COMMANDS FOR CREATING OR ADDING DATA TO THE KEYSTORE +.TP +\f[CR]\-gencert\f[R] +The following are the available options for the \f[CR]\-gencert\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-rfc\f[R]}: Output in RFC (Request For Comment) style +.IP \(bu 2 +{\f[CR]\-infile\f[R] \f[I]infile\f[R]}: Input file name +.IP \(bu 2 +{\f[CR]\-outfile\f[R] \f[I]outfile\f[R]}: Output file name +.IP \(bu 2 +{\f[CR]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process +.IP \(bu 2 +{\f[CR]\-sigalg\f[R] \f[I]sigalg\f[R]}: Signature algorithm name +.IP \(bu 2 +{\f[CR]\-dname\f[R] \f[I]dname\f[R]}: Distinguished name +.IP \(bu 2 +{\f[CR]\-startdate\f[R] \f[I]startdate\f[R]}: Certificate validity start +date and time +.IP \(bu 2 +{\f[CR]\-ext\f[R] \f[I]ext\f[R]}*: X.509 extension +.IP \(bu 2 +{\f[CR]\-validity\f[R] \f[I]days\f[R]}: Validity number of days +.IP \(bu 2 +[\f[CR]\-keypass\f[R] \f[I]arg\f[R]]: Key password +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Adds a security provider by name (such as SunPKCS11) +with an optional configure argument. +The value of the security provider is the name of a security provider +that is defined in a module. +.RS 2 +.PP +For example, +.RS +.PP +\f[CR]keytool \-addprovider SunPKCS11 \-providerarg some.cfg ...\f[R] +.RE +.PP +\f[B]Note:\f[R] +.PP +For compatibility reasons, the SunPKCS11 provider can still be loaded +with \f[CR]\-providerclass sun.security.pkcs11.SunPKCS11\f[R] even if it +is now defined in a module. +This is the only module included in the JDK that needs a configuration, +and therefore the most widely used with the \f[CR]\-providerclass\f[R] +option. +For legacy security providers located on classpath and loaded by +reflection, \f[CR]\-providerclass\f[R] should still be used. +.RE +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by fully qualified class name +with an optional configure argument. +.RS 2 +.PP +For example, if \f[CR]MyProvider\f[R] is a legacy provider loaded via +reflection, +.RS +.PP +\f[CR]keytool \-providerclass com.example.MyProvider ...\f[R] +.RE +.RE +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +.IP \(bu 2 +{\f[CR]\-protected\f[R]}: Password provided through a protected +mechanism +Use the \f[CR]\-gencert\f[R] command to generate a certificate as a +response to a certificate request file (which can be created by the +\f[CR]keytool \-certreq\f[R] command). +The command reads the request either from \f[I]infile\f[R] or, if +omitted, from the standard input, signs it by using the alias\(aqs +private key, and outputs the X.509 certificate into either +\f[I]outfile\f[R] or, if omitted, to the standard output. +When \f[CR]\-rfc\f[R] is specified, the output format is Base64\-encoded +PEM; otherwise, a binary DER is created. +The \f[CR]\-sigalg\f[R] value specifies the algorithm that should be +used to sign the certificate. +The \f[I]startdate\f[R] argument is the start time and date that the +certificate is valid. +The \f[I]days\f[R] argument tells the number of days for which the +certificate should be considered valid. +When \f[I]dname\f[R] is provided, it is used as the subject of the +generated certificate. +Otherwise, the one from the certificate request is used. +The \f[CR]\-ext\f[R] value shows what X.509 extensions will be embedded +in the certificate. +Read \f[B]Common Command Options\f[R] for the grammar of +\f[CR]\-ext\f[R]. +The \f[CR]\-gencert\f[R] option enables you to create certificate +chains. +The following example creates a certificate, \f[CR]e1\f[R], that +contains three certificates in its certificate chain. +The following commands creates four key pairs named \f[CR]ca\f[R], +\f[CR]ca1\f[R], \f[CR]ca2\f[R], and \f[CR]e1\f[R]: +.IP +.EX +keytool \-alias ca \-dname CN=CA \-genkeypair \-keyalg rsa +keytool \-alias ca1 \-dname CN=CA \-genkeypair \-keyalg rsa +keytool \-alias ca2 \-dname CN=CA \-genkeypair \-keyalg rsa +keytool \-alias e1 \-dname CN=E1 \-genkeypair \-keyalg rsa +.EE +The following two commands create a chain of signed certificates; +\f[CR]ca\f[R] signs \f[CR]ca1\f[R] and \f[CR]ca1\f[R] signs +\f[CR]ca2\f[R], all of which are self\-issued: +.IP +.EX +keytool \-alias ca1 \-certreq | + keytool \-alias ca \-gencert \-ext san=dns:ca1 | + keytool \-alias ca1 \-importcert + +keytool \-alias ca2 \-certreq | + keytool \-alias ca1 \-gencert \-ext san=dns:ca2 | + keytool \-alias ca2 \-importcert +.EE +The following command creates the certificate \f[CR]e1\f[R] and stores +it in the \f[CR]e1.cert\f[R] file, which is signed by \f[CR]ca2\f[R]. +As a result, \f[CR]e1\f[R] should contain \f[CR]ca\f[R], \f[CR]ca1\f[R], +and \f[CR]ca2\f[R] in its certificate chain: +.RS +.PP +\f[CR]keytool \-alias e1 \-certreq | keytool \-alias ca2 \-gencert > e1.cert\f[R] +.RE +.RE +.TP +\f[CR]\-genkeypair\f[R] +The following are the available options for the \f[CR]\-genkeypair\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process +.IP \(bu 2 +\f[CR]\-keyalg\f[R] \f[I]alg\f[R]: Key algorithm name +.IP \(bu 2 +{\f[CR]\-keysize\f[R] \f[I]size\f[R]}: Key bit size +.IP \(bu 2 +{\f[CR]\-groupname\f[R] \f[I]name\f[R]}: Group name. +For example, an Elliptic Curve name. +.IP \(bu 2 +{\f[CR]\-sigalg\f[R] \f[I]alg\f[R]}: Signature algorithm name +.IP \(bu 2 +{\f[CR]\-signer\f[R] \f[I]alias\f[R]}: Signer alias +.IP \(bu 2 +[\f[CR]\-signerkeypass\f[R] \f[I]arg\f[R]]: Signer key password +.IP \(bu 2 +[\f[CR]\-dname\f[R] \f[I]name\f[R]]: Distinguished name +.IP \(bu 2 +{\f[CR]\-startdate\f[R] \f[I]date\f[R]}: Certificate validity start date +and time +.IP \(bu 2 +{\f[CR]\-ext\f[R] \f[I]value\f[R]}*: X.509 extension +.IP \(bu 2 +{\f[CR]\-validity\f[R] \f[I]days\f[R]}: Validity number of days +.IP \(bu 2 +[\f[CR]\-keypass\f[R] \f[I]arg\f[R]]: Key password +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]] }: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +.IP \(bu 2 +{\f[CR]\-protected\f[R]}: Password provided through a protected +mechanism +Use the \f[CR]\-genkeypair\f[R] command to generate a key pair (a public +key and associated private key). +When the \f[CR]\-signer\f[R] option is not specified, the public key is +wrapped in an X.509 v3 self\-signed certificate and stored as a +single\-element certificate chain. +When the \f[CR]\-signer\f[R] option is specified, a new certificate is +generated and signed by the designated signer and stored as a +multiple\-element certificate chain (containing the generated +certificate itself, and the signer\(aqs certificate chain). +The certificate chain and private key are stored in a new keystore entry +that is identified by its alias. +The \f[CR]\-keyalg\f[R] value specifies the algorithm to be used to +generate the key pair. +The \f[CR]\-keysize\f[R] value specifies the size of each key to be +generated. +The \f[CR]\-groupname\f[R] value specifies the named group (for example, +the standard or predefined name of an Elliptic Curve) of the key to be +generated. +When a \f[CR]\-keysize\f[R] value is provided, it will be used to +initialize a \f[CR]KeyPairGenerator\f[R] object using the +\f[CR]initialize(int keysize)\f[R] method. +When a \f[CR]\-groupname\f[R] value is provided, it will be used to +initialize a \f[CR]KeyPairGenerator\f[R] object using the +\f[CR]initialize(AlgorithmParameterSpec params)\f[R] method where +\f[CR]params\f[R] is \f[CR]new NamedParameterSpec(groupname)\f[R]. +Only one of \f[CR]\-groupname\f[R] and \f[CR]\-keysize\f[R] can be +specified. +If an algorithm has multiple named groups that have the same key size, +the \f[CR]\-groupname\f[R] option should usually be used. +In this case, if \f[CR]\-keysize\f[R] is specified, it\(aqs up to the +security provider to determine which named group is chosen when +generating a key pair. +The \f[CR]\-sigalg\f[R] value specifies the algorithm that should be +used to sign the certificate. +This algorithm must be compatible with the \f[CR]\-keyalg\f[R] value. +The \f[CR]\-signer\f[R] value specifies the alias of a +\f[CR]PrivateKeyEntry\f[R] for the signer that already exists in the +keystore. +This option is used to sign the certificate with the signer\(aqs private +key. +This is especially useful for key agreement algorithms (i.e. +the \f[CR]\-keyalg\f[R] value is \f[CR]XDH\f[R], \f[CR]X25519\f[R], +\f[CR]X448\f[R], or \f[CR]DH\f[R]) as these keys cannot be used for +digital signatures, and therefore a self\-signed certificate cannot be +created. +The \f[CR]\-signerkeypass\f[R] value specifies the password of the +signer\(aqs private key. +It can be specified if the private key of the signer entry is protected +by a password different from the store password. +The \f[CR]\-dname\f[R] value specifies the X.500 Distinguished Name to +be associated with the value of \f[CR]\-alias\f[R]. +If the \f[CR]\-signer\f[R] option is not specified, the issuer and +subject fields of the self\-signed certificate are populated with the +specified distinguished name. +If the \f[CR]\-signer\f[R] option is specified, the subject field of the +certificate is populated with the specified distinguished name and the +issuer field is populated with the subject field of the signer\(aqs +certificate. +If a distinguished name is not provided at the command line, then the +user is prompted for one. +The value of \f[CR]\-keypass\f[R] is a password used to protect the +private key of the generated key pair. +If a password is not provided, then the user is prompted for it. +If you press the \f[B]Return\f[R] key at the prompt, then the key +password is set to the same password as the keystore password. +The \f[CR]\-keypass\f[R] value must have at least six characters. +The value of \f[CR]\-startdate\f[R] specifies the issue time of the +certificate, also known as the \(dqNot Before\(dq value of the X.509 +certificate\(aqs Validity field. +The option value can be set in one of these two forms: +([\f[CR]+\-\f[R]]\f[I]nnn\f[R][\f[CR]ymdHMS\f[R]])+ +[\f[I]yyyy\f[R]\f[CR]/\f[R]\f[I]mm\f[R]\f[CR]/\f[R]\f[I]dd\f[R]] +[\f[I]HH\f[R]\f[CR]:\f[R]\f[I]MM\f[R]\f[CR]:\f[R]\f[I]SS\f[R]] +With the first form, the issue time is shifted by the specified value +from the current time. +The value is a concatenation of a sequence of subvalues. +Inside each subvalue, the plus sign (+) means shift forward, and the +minus sign (\-) means shift backward. +The time to be shifted is \f[I]nnn\f[R] units of years, months, days, +hours, minutes, or seconds (denoted by a single character of +\f[CR]y\f[R], \f[CR]m\f[R], \f[CR]d\f[R], \f[CR]H\f[R], \f[CR]M\f[R], or +\f[CR]S\f[R] respectively). +The exact value of the issue time is calculated by using the +\f[CR]java.util.GregorianCalendar.add(int field, int amount)\f[R] method +on each subvalue, from left to right. +For example, the issue time can be specified by: +.IP +.EX +Calendar c = new GregorianCalendar(); +c.add(Calendar.YEAR, \-1); +c.add(Calendar.MONTH, 1); +c.add(Calendar.DATE, \-1); +return c.getTime() +.EE +With the second form, the user sets the exact issue time in two parts, +year/month/day and hour:minute:second (using the local time zone). +The user can provide only one part, which means the other part is the +same as the current date (or time). +The user must provide the exact number of digits shown in the format +definition (padding with 0 when shorter). +When both date and time are provided, there is one (and only one) space +character between the two parts. +The hour should always be provided in 24\-hour format. +When the option isn\(aqt provided, the start date is the current time. +The option can only be provided one time. +The value of \f[I]date\f[R] specifies the number of days (starting at +the date specified by \f[CR]\-startdate\f[R], or the current date when +\f[CR]\-startdate\f[R] isn\(aqt specified) for which the certificate +should be considered valid. +.RE +.TP +\f[CR]\-genseckey\f[R] +The following are the available options for the \f[CR]\-genseckey\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process +.IP \(bu 2 +[\f[CR]\-keypass\f[R] \f[I]arg\f[R]]: Key password +.IP \(bu 2 +\f[CR]\-keyalg\f[R] \f[I]alg\f[R]: Key algorithm name +.IP \(bu 2 +{\f[CR]\-keysize\f[R] \f[I]size\f[R]}: Key bit size +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +.IP \(bu 2 +{\f[CR]\-protected\f[R]}: Password provided through a protected +mechanism +Use the \f[CR]\-genseckey\f[R] command to generate a secret key and +store it in a new \f[CR]KeyStore.SecretKeyEntry\f[R] identified by +\f[CR]alias\f[R]. +The value of \f[CR]\-keyalg\f[R] specifies the algorithm to be used to +generate the secret key, and the value of \f[CR]\-keysize\f[R] specifies +the size of the key that is generated. +The \f[CR]\-keypass\f[R] value is a password that protects the secret +key. +If a password is not provided, then the user is prompted for it. +If you press the \f[B]Return\f[R] key at the prompt, then the key +password is set to the same password that is used for the +\f[CR]\-keystore\f[R]. +The \f[CR]\-keypass\f[R] value must contain at least six characters. +.RE +.TP +\f[CR]\-importcert\f[R] +The following are the available options for the \f[CR]\-importcert\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-noprompt\f[R]}: Do not prompt +.IP \(bu 2 +{\f[CR]\-trustcacerts\f[R]}: Trust certificates from cacerts +.IP \(bu 2 +{\f[CR]\-protected\f[R]}: Password is provided through protected +mechanism +.IP \(bu 2 +{\f[CR]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process +.IP \(bu 2 +{\f[CR]\-file\f[R] \f[I]file\f[R]}: Input file name +.IP \(bu 2 +[\f[CR]\-keypass\f[R] \f[I]arg\f[R]]: Key password +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +{\f[CR]\-cacerts\f[R]}: Access the cacerts keystore +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +Use the \f[CR]\-importcert\f[R] command to read the certificate or +certificate chain (where the latter is supplied in a PKCS#7 formatted +reply or in a sequence of X.509 certificates) from \f[CR]\-file\f[R] +\f[I]file\f[R], and store it in the \f[CR]keystore\f[R] entry identified +by \f[CR]\-alias\f[R]. +If \f[CR]\-file\f[R] \f[I]file\f[R] is not specified, then the +certificate or certificate chain is read from \f[CR]stdin\f[R]. +The \f[CR]keytool\f[R] command can import X.509 v1, v2, and v3 +certificates, and PKCS#7 formatted certificate chains consisting of +certificates of that type. +The data to be imported must be provided either in binary encoding +format or in printable encoding format (also known as Base64 encoding) +as defined by the Internet RFC 1421 standard. +In the latter case, the encoding must be bounded at the beginning by a +string that starts with \f[CR]\-\-\-\-\-BEGIN\f[R], and bounded at the +end by a string that starts with \f[CR]\-\-\-\-\-END\f[R]. +You import a certificate for two reasons: To add it to the list of +trusted certificates, and to import a certificate reply received from a +certificate authority (CA) as the result of submitting a Certificate +Signing Request (CSR) to that CA. +See the \f[CR]\-certreq\f[R] command in \f[B]Commands for Generating a +Certificate Request\f[R]. +The type of import is indicated by the value of the \f[CR]\-alias\f[R] +option. +If the alias doesn\(aqt point to a key entry, then the +\f[CR]keytool\f[R] command assumes you are adding a trusted certificate +entry. +In this case, the alias shouldn\(aqt already exist in the keystore. +If the alias does exist, then the \f[CR]keytool\f[R] command outputs an +error because a trusted certificate already exists for that alias, and +doesn\(aqt import the certificate. +If \f[CR]\-alias\f[R] points to a key entry, then the \f[CR]keytool\f[R] +command assumes that you\(aqre importing a certificate reply. +.RE +.TP +\f[CR]\-importpass\f[R] +The following are the available options for the \f[CR]\-importpass\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process +.IP \(bu 2 +[\f[CR]\-keypass\f[R] \f[I]arg\f[R]]: Key password +.IP \(bu 2 +{\f[CR]\-keyalg\f[R] \f[I]alg\f[R]}: Key algorithm name +.IP \(bu 2 +{\f[CR]\-keysize\f[R] \f[I]size\f[R]}: Key bit size +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +.IP \(bu 2 +{\f[CR]\-protected\f[R]}: Password provided through a protected +mechanism +Use the \f[CR]\-importpass\f[R] command to imports a passphrase and +store it in a new \f[CR]KeyStore.SecretKeyEntry\f[R] identified by +\f[CR]\-alias\f[R]. +The passphrase may be supplied via the standard input stream; otherwise +the user is prompted for it. +The \f[CR]\-keypass\f[R] option provides a password to protect the +imported passphrase. +If a password is not provided, then the user is prompted for it. +If you press the \f[B]Return\f[R] key at the prompt, then the key +password is set to the same password as that used for the +\f[CR]keystore\f[R]. +The \f[CR]\-keypass\f[R] value must contain at least six characters. +.RE +.SH COMMANDS FOR IMPORTING CONTENTS FROM ANOTHER KEYSTORE +.TP +\f[CR]\-importkeystore\f[R] +The following are the available options for the +\f[CR]\-importkeystore\f[R] command: +.RS +.IP \(bu 2 +\f[CR]\-srckeystore\f[R] \f[I]keystore\f[R]: Source keystore name +.IP \(bu 2 +{\f[CR]\-destkeystore\f[R] \f[I]keystore\f[R]}: Destination keystore +name +.IP \(bu 2 +{\f[CR]\-srcstoretype\f[R] \f[I]type\f[R]}: Source keystore type +.IP \(bu 2 +{\f[CR]\-deststoretype\f[R] \f[I]type\f[R]}: Destination keystore type +.IP \(bu 2 +[\f[CR]\-srcstorepass\f[R] \f[I]arg\f[R]]: Source keystore password +.IP \(bu 2 +[\f[CR]\-deststorepass\f[R] \f[I]arg\f[R]]: Destination keystore +password +.IP \(bu 2 +{\f[CR]\-srcprotected\f[R]}: Source keystore password protected +.IP \(bu 2 +{\f[CR]\-destprotected\f[R]}: Destination keystore password protected +.IP \(bu 2 +{\f[CR]\-srcprovidername\f[R] \f[I]name\f[R]}: Source keystore provider +name +.IP \(bu 2 +{\f[CR]\-destprovidername\f[R] \f[I]name\f[R]}: Destination keystore +provider name +.IP \(bu 2 +{\f[CR]\-srcalias\f[R] \f[I]alias\f[R]}: Source alias +.IP \(bu 2 +{\f[CR]\-destalias\f[R] \f[I]alias\f[R]}: Destination alias +.IP \(bu 2 +[\f[CR]\-srckeypass\f[R] \f[I]arg\f[R]]: Source key password +.IP \(bu 2 +[\f[CR]\-destkeypass\f[R] \f[I]arg\f[R]]: Destination key password +.IP \(bu 2 +{\f[CR]\-noprompt\f[R]}: Do not prompt +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by fully qualified class name +with an optional configure argument +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +\f[B]Note:\f[R] +This is the first line of all options: +.RS +.PP +\f[CR]\-srckeystore\f[R] \f[I]keystore\f[R] \f[CR]\-destkeystore\f[R] +\f[I]keystore\f[R] +.RE +Use the \f[CR]\-importkeystore\f[R] command to import a single entry or +all entries from a source keystore to a destination keystore. +\f[B]Note:\f[R] +If you do not specify \f[CR]\-destkeystore\f[R] when using the +\f[CR]keytool \-importkeystore\f[R] command, then the default keystore +used is \f[CR]$HOME/.keystore\f[R]. +When the \f[CR]\-srcalias\f[R] option is provided, the command imports +the single entry identified by the alias to the destination keystore. +If a destination alias isn\(aqt provided with \f[CR]\-destalias\f[R], +then \f[CR]\-srcalias\f[R] is used as the destination alias. +If the source entry is protected by a password, then +\f[CR]\-srckeypass\f[R] is used to recover the entry. +If \f[CR]\-srckeypass\f[R] isn\(aqt provided, then the +\f[CR]keytool\f[R] command attempts to use \f[CR]\-srcstorepass\f[R] to +recover the entry. +If \f[CR]\-srcstorepass\f[R] is not provided or is incorrect, then the +user is prompted for a password. +The destination entry is protected with \f[CR]\-destkeypass\f[R]. +If \f[CR]\-destkeypass\f[R] isn\(aqt provided, then the destination +entry is protected with the source entry password. +For example, most third\-party tools require \f[CR]storepass\f[R] and +\f[CR]keypass\f[R] in a PKCS #12 keystore to be the same. +To create a PKCS#12 keystore for these tools, always specify a +\f[CR]\-destkeypass\f[R] that is the same as \f[CR]\-deststorepass\f[R]. +If the \f[CR]\-srcalias\f[R] option isn\(aqt provided, then all entries +in the source keystore are imported into the destination keystore. +Each destination entry is stored under the alias from the source entry. +If the source entry is protected by a password, then +\f[CR]\-srcstorepass\f[R] is used to recover the entry. +If \f[CR]\-srcstorepass\f[R] is not provided or is incorrect, then the +user is prompted for a password. +If a source keystore entry type isn\(aqt supported in the destination +keystore, or if an error occurs while storing an entry into the +destination keystore, then the user is prompted either to skip the entry +and continue or to quit. +The destination entry is protected with the source entry password. +If the destination alias already exists in the destination keystore, +then the user is prompted either to overwrite the entry or to create a +new entry under a different alias name. +If the \f[CR]\-noprompt\f[R] option is provided, then the user isn\(aqt +prompted for a new destination alias. +Existing entries are overwritten with the destination alias name. +Entries that can\(aqt be imported are skipped and a warning is +displayed. +.RE +.SH COMMANDS FOR GENERATING A CERTIFICATE REQUEST +.TP +\f[CR]\-certreq\f[R] +The following are the available options for the \f[CR]\-certreq\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process +.IP \(bu 2 +{\f[CR]\-sigalg\f[R] \f[I]alg\f[R]}: Signature algorithm name +.IP \(bu 2 +{\f[CR]\-file\f[R] \f[I]file\f[R]}: Output file name +.IP \(bu 2 +[ \f[CR]\-keypass\f[R] \f[I]arg\f[R]]: Key password +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +{\f[CR]\-dname\f[R] \f[I]name\f[R]}: Distinguished name +.IP \(bu 2 +{\f[CR]\-ext\f[R] \f[I]value\f[R]}: X.509 extension +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +.IP \(bu 2 +{\f[CR]\-protected\f[R]}: Password provided through a protected +mechanism +Use the \f[CR]\-certreq\f[R] command to generate a Certificate Signing +Request (CSR) using the PKCS #10 format. +A CSR is intended to be sent to a CA. +The CA authenticates the certificate requestor (usually offline) and +returns a certificate or certificate chain to replace the existing +certificate chain (initially a self\-signed certificate) in the +keystore. +The private key associated with \f[I]alias\f[R] is used to create the +PKCS #10 certificate request. +To access the private key, the correct password must be provided. +If \f[CR]\-keypass\f[R] isn\(aqt provided at the command line and is +different from the password used to protect the integrity of the +keystore, then the user is prompted for it. +If \f[CR]\-dname\f[R] is provided, then it is used as the subject in the +CSR. +Otherwise, the X.500 Distinguished Name associated with alias is used. +The \f[CR]\-sigalg\f[R] value specifies the algorithm that should be +used to sign the CSR. +The CSR is stored in the \f[CR]\-file\f[R] \f[I]file\f[R]. +If a file is not specified, then the CSR is output to +\f[CR]\-stdout\f[R]. +Use the \f[CR]\-importcert\f[R] command to import the response from the +CA. +.RE +.SH COMMANDS FOR EXPORTING DATA +.TP +\f[CR]\-exportcert\f[R] +The following are the available options for the \f[CR]\-exportcert\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-rfc\f[R]}: Output in RFC style +.IP \(bu 2 +{\f[CR]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process +.IP \(bu 2 +{\f[CR]\-file\f[R] \f[I]file\f[R]}: Output file name +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +{\f[CR]\-cacerts\f[R]}: Access the cacerts keystore +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]] }: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +.IP \(bu 2 +{\f[CR]\-protected\f[R]}: Password provided through a protected +mechanism +Use the \f[CR]\-exportcert\f[R] command to read a certificate from the +keystore that is associated with \f[CR]\-alias\f[R] \f[I]alias\f[R] and +store it in the \f[CR]\-file\f[R] \f[I]file\f[R]. +When a file is not specified, the certificate is output to +\f[CR]stdout\f[R]. +By default, the certificate is output in binary encoding. +If the \f[CR]\-rfc\f[R] option is specified, then the output in the +printable encoding format defined by the Internet RFC 1421 Certificate +Encoding Standard. +If \f[CR]\-alias\f[R] refers to a trusted certificate, then that +certificate is output. +Otherwise, \f[CR]\-alias\f[R] refers to a key entry with an associated +certificate chain. +In that case, the first certificate in the chain is returned. +This certificate authenticates the public key of the entity addressed by +\f[CR]\-alias\f[R]. +.RE +.SH COMMANDS FOR DISPLAYING DATA +.TP +\f[CR]\-list\f[R] +The following are the available options for the \f[CR]\-list\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-rfc\f[R]}: Output in RFC style +.IP \(bu 2 +{\f[CR]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +{\f[CR]\-cacerts\f[R]}: Access the cacerts keystore +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]] }: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +.IP \(bu 2 +{\f[CR]\-protected\f[R]}: Password provided through a protected +mechanism +Use the \f[CR]\-list\f[R] command to print the contents of the keystore +entry identified by \f[CR]\-alias\f[R] to \f[CR]stdout\f[R]. +If \f[CR]\-alias\f[R] \f[I]alias\f[R] is not specified, then the +contents of the entire keystore are printed. +By default, this command prints the SHA\-256 fingerprint of a +certificate. +If the \f[CR]\-v\f[R] option is specified, then the certificate is +printed in human\-readable format, with additional information such as +the owner, issuer, serial number, and any extensions. +If the \f[CR]\-rfc\f[R] option is specified, then the certificate +contents are printed by using the printable encoding format, as defined +by the Internet RFC 1421 Certificate Encoding Standard. +\f[B]Note:\f[R] +You can\(aqt specify both \f[CR]\-v\f[R] and \f[CR]\-rfc\f[R] in the +same command. +Otherwise, an error is reported. +.RE +.TP +\f[CR]\-printcert\f[R] +The following are the available options for the \f[CR]\-printcert\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-rfc\f[R]}: Output in RFC style +.IP \(bu 2 +{\f[CR]\-file\f[R] \f[I]cert_file\f[R]}: Input file name +.IP \(bu 2 +{\f[CR]\-sslserver\f[R] \f[I]server\f[R][\f[CR]:\f[R]\f[I]port\f[R]]}:: +Secure Sockets Layer (SSL) server host and port +.IP \(bu 2 +{\f[CR]\-jarfile\f[R] \f[I]JAR_file\f[R]}: Signed \f[CR].jar\f[R] file +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +{\f[CR]\-trustcacerts\f[R]}: Trust certificates from cacerts +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-protected\f[R]}: Password is provided through protected +mechanism +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +Use the \f[CR]\-printcert\f[R] command to read and print the certificate +from \f[CR]\-file\f[R] \f[I]cert_file\f[R], the SSL server located at +\f[CR]\-sslserver\f[R] \f[I]server\f[R][\f[CR]:\f[R]\f[I]port\f[R]], or +the signed JAR file specified by \f[CR]\-jarfile\f[R] +\f[I]JAR_file\f[R]. +It prints its contents in a human\-readable format. +When a port is not specified, the standard HTTPS port 443 is assumed. +\f[B]Note:\f[R] +The \f[CR]\-sslserver\f[R] and \f[CR]\-file\f[R] options can\(aqt be +provided in the same command. +Otherwise, an error is reported. +If you don\(aqt specify either option, then the certificate is read from +\f[CR]stdin\f[R]. +When\f[CR]\-rfc\f[R] is specified, the \f[CR]keytool\f[R] command prints +the certificate in PEM mode as defined by the Internet RFC 1421 +Certificate Encoding standard. +If the certificate is read from a file or \f[CR]stdin\f[R], then it +might be either binary encoded or in printable encoding format, as +defined by the RFC 1421 Certificate Encoding standard. +If the SSL server is behind a firewall, then the +\f[CR]\-J\-Dhttps.proxyHost=proxyhost\f[R] and +\f[CR]\-J\-Dhttps.proxyPort=proxyport\f[R] options can be specified on +the command line for proxy tunneling. +\f[B]Note:\f[R] +This command can be used independently of a keystore. +This command does not check for the weakness of a certificate\(aqs +signature algorithm if it is a trusted certificate in the user keystore +(specified by \f[CR]\-keystore\f[R]) or in the \f[CR]cacerts\f[R] +keystore (if \f[CR]\-trustcacerts\f[R] is specified). +.RE +.TP +\f[CR]\-printcertreq\f[R] +The following are the available options for the +\f[CR]\-printcertreq\f[R] command: +.RS +.IP \(bu 2 +{\f[CR]\-file\f[R] \f[I]file\f[R]}: Input file name +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +Use the \f[CR]\-printcertreq\f[R] command to print the contents of a +PKCS #10 format certificate request, which can be generated by the +\f[CR]keytool \-certreq\f[R] command. +The command reads the request from file. +If there is no file, then the request is read from the standard input. +.RE +.TP +\f[CR]\-printcrl\f[R] +The following are the available options for the \f[CR]\-printcrl\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-file crl\f[R]}: Input file name +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +{\f[CR]\-trustcacerts\f[R]}: Trust certificates from cacerts +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-protected\f[R]}: Password is provided through protected +mechanism +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +Use the \f[CR]\-printcrl\f[R] command to read the Certificate Revocation +List (CRL) from \f[CR]\-file crl\f[R] . +A CRL is a list of the digital certificates that were revoked by the CA +that issued them. +The CA generates the \f[CR]crl\f[R] file. +\f[B]Note:\f[R] +This command can be used independently of a keystore. +This command attempts to verify the CRL using a certificate from the +user keystore (specified by \f[CR]\-keystore\f[R]) or the +\f[CR]cacerts\f[R] keystore (if \f[CR]\-trustcacerts\f[R] is specified), +and will print out a warning if it cannot be verified. +.RE +.SH COMMANDS FOR MANAGING THE KEYSTORE +.TP +\f[CR]\-storepasswd\f[R] +The following are the available options for the \f[CR]\-storepasswd\f[R] +command: +.RS +.IP \(bu 2 +[\f[CR]\-new\f[R] \f[I]arg\f[R]]: New password +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +{\f[CR]\-cacerts\f[R]}: Access the cacerts keystore +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +Use the \f[CR]\-storepasswd\f[R] command to change the password used to +protect the integrity of the keystore contents. +The new password is set by \f[CR]\-new\f[R] \f[I]arg\f[R] and must +contain at least six characters. +.RE +.TP +\f[CR]\-keypasswd\f[R] +The following are the available options for the \f[CR]\-keypasswd\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process +.IP \(bu 2 +[\f[CR]\-keypass\f[R] \f[I]old_keypass\f[R]]: Key password +.IP \(bu 2 +[\f[CR]\-new\f[R] \f[I]new_keypass\f[R]]: New password +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +{\f[CR]\-storepass\f[R] \f[I]arg\f[R]}: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +Use the \f[CR]\-keypasswd\f[R] command to change the password (under +which private/secret keys identified by \f[CR]\-alias\f[R] are +protected) from \f[CR]\-keypass\f[R] \f[I]old_keypass\f[R] to +\f[CR]\-new\f[R] \f[I]new_keypass\f[R]. +The password value must contain at least six characters. +If the \f[CR]\-keypass\f[R] option isn\(aqt provided at the command line +and the \f[CR]\-keypass\f[R] password is different from the keystore +password (\f[CR]\-storepass\f[R] \f[I]arg\f[R]), then the user is +prompted for it. +If the \f[CR]\-new\f[R] option isn\(aqt provided at the command line, +then the user is prompted for it. +.RE +.TP +\f[CR]\-delete\f[R] +The following are the available options for the \f[CR]\-delete\f[R] +command: +.RS +.IP \(bu 2 +[\f[CR]\-alias\f[R] \f[I]alias\f[R]]: Alias name of the entry to process +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +{\f[CR]\-cacerts\f[R]}: Access the cacerts keystore +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +.IP \(bu 2 +{\f[CR]\-protected\f[R]}: Password provided through a protected +mechanism +Use the \f[CR]\-delete\f[R] command to delete the \f[CR]\-alias\f[R] +\f[I]alias\f[R] entry from the keystore. +When not provided at the command line, the user is prompted for the +\f[CR]alias\f[R]. +.RE +.TP +\f[CR]\-changealias\f[R] +The following are the available options for the \f[CR]\-changealias\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-alias\f[R] \f[I]alias\f[R]}: Alias name of the entry to process +.IP \(bu 2 +[\f[CR]\-destalias\f[R] \f[I]alias\f[R]]: Destination alias +.IP \(bu 2 +[\f[CR]\-keypass\f[R] \f[I]arg\f[R]]: Key password +.IP \(bu 2 +{\f[CR]\-keystore\f[R] \f[I]keystore\f[R]}: Keystore name +.IP \(bu 2 +{\f[CR]\-cacerts\f[R]}: Access the cacerts keystore +.IP \(bu 2 +[\f[CR]\-storepass\f[R] \f[I]arg\f[R]]: Keystore password +.IP \(bu 2 +{\f[CR]\-storetype\f[R] \f[I]type\f[R]}: Keystore type +.IP \(bu 2 +{\f[CR]\-providername\f[R] \f[I]name\f[R]}: Provider name +.IP \(bu 2 +{\f[CR]\-addprovider\f[R] \f[I]name\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by name (such as SunPKCS11) with +an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerclass\f[R] \f[I]class\f[R] [\f[CR]\-providerarg\f[R] +\f[I]arg\f[R]]}: Add security provider by fully qualified class name +with an optional configure argument. +.IP \(bu 2 +{\f[CR]\-providerpath\f[R] \f[I]list\f[R]}: Provider classpath +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +.IP \(bu 2 +{\f[CR]\-protected\f[R]}: Password provided through a protected +mechanism +Use the \f[CR]\-changealias\f[R] command to move an existing keystore +entry from \f[CR]\-alias\f[R] \f[I]alias\f[R] to a new +\f[CR]\-destalias\f[R] \f[I]alias\f[R]. +If a destination alias is not provided, then the command prompts you for +one. +If the original entry is protected with an entry password, then the +password can be supplied with the \f[CR]\-keypass\f[R] option. +If a key password is not provided, then the \f[CR]\-storepass\f[R] (if +provided) is attempted first. +If the attempt fails, then the user is prompted for a password. +.RE +.SH COMMANDS FOR DISPLAYING SECURITY\-RELATED INFORMATION +.TP +\f[CR]\-showinfo\f[R] +The following are the available options for the \f[CR]\-showinfo\f[R] +command: +.RS +.IP \(bu 2 +{\f[CR]\-tls\f[R]}: Displays TLS configuration information +.IP \(bu 2 +{\f[CR]\-v\f[R]}: Verbose output +Use the \f[CR]\-showinfo\f[R] command to display various +security\-related information. +The \f[CR]\-tls\f[R] option displays TLS configurations, such as the +list of enabled protocols and cipher suites. +.RE +.SH COMMANDS FOR DISPLAYING PROGRAM VERSION +You can use \f[CR]\-version\f[R] to print the program version of +\f[CR]keytool\f[R]. +.SH COMMANDS FOR DISPLAYING HELP INFORMATION +You can use \f[CR]\-\-help\f[R] to display a list of \f[CR]keytool\f[R] +commands or to display help information about a specific +\f[CR]keytool\f[R] command. +.IP \(bu 2 +To display a list of \f[CR]keytool\f[R] commands, enter: +.RS 2 +.RS +.PP +\f[CR]keytool \-\-help\f[R] +.RE +.RE +.IP \(bu 2 +To display help information about a specific \f[CR]keytool\f[R] command, +enter: +.RS 2 +.RS +.PP +\f[CR]keytool \-<command> \-\-help\f[R] +.RE +.RE +.SH COMMON COMMAND OPTIONS +The \f[CR]\-v\f[R] option can appear for all commands except +\f[CR]\-\-help\f[R]. +When the \f[CR]\-v\f[R] option appears, it signifies verbose mode, which +means that more information is provided in the output. +.PP +The \f[CR]\-J\f[R]\f[I]option\f[R] argument can appear for any command. +When the \f[CR]\-J\f[R]\f[I]option\f[R] is used, the specified +\f[I]option\f[R] string is passed directly to the Java interpreter. +This option doesn\(aqt contain any spaces. +It\(aqs useful for adjusting the execution environment or memory usage. +For a list of possible interpreter options, enter \f[CR]java \-h\f[R] or +\f[CR]java \-X\f[R] at the command line. +.PP +These options can appear for all commands operating on a keystore: +.TP +\f[CR]\-storetype\f[R] \f[I]storetype\f[R] +This qualifier specifies the type of keystore to be instantiated. +.TP +\f[CR]\-keystore\f[R] \f[I]keystore\f[R] +The keystore location. +.RS +If the JKS \f[CR]storetype\f[R] is used and a keystore file doesn\(aqt +yet exist, then certain \f[CR]keytool\f[R] commands can result in a new +keystore file being created. +For example, if \f[CR]keytool \-genkeypair\f[R] is called and the +\f[CR]\-keystore\f[R] option isn\(aqt specified, the default keystore +file named \f[CR].keystore\f[R] is created in the user\(aqs home +directory if it doesn\(aqt already exist. +Similarly, if the \f[CR]\-keystore ks_file\f[R] option is specified but +\f[CR]ks_file\f[R] doesn\(aqt exist, then it is created. +For more information on the JKS \f[CR]storetype\f[R], see the +\f[B]KeyStore Implementation\f[R] section in \f[B]KeyStore aliases\f[R]. +Note that the input stream from the \f[CR]\-keystore\f[R] option is +passed to the \f[CR]KeyStore.load\f[R] method. +If \f[CR]NONE\f[R] is specified as the URL, then a null stream is passed +to the \f[CR]KeyStore.load\f[R] method. +\f[CR]NONE\f[R] should be specified if the keystore isn\(aqt +file\-based. +For example, when the keystore resides on a hardware token device. +.RE +.TP +\f[CR]\-cacerts\f[R] \f[I]cacerts\f[R] +Operates on the \f[I]cacerts\f[R] keystore . +This option is equivalent to \f[CR]\-keystore\f[R] +\f[I]path_to_cacerts\f[R] \f[CR]\-storetype\f[R] +\f[I]type_of_cacerts\f[R]. +An error is reported if the \f[CR]\-keystore\f[R] or +\f[CR]\-storetype\f[R] option is used with the \f[CR]\-cacerts\f[R] +option. +.TP +\f[CR]\-storepass\f[R] [\f[CR]:env\f[R] | \f[CR]:file\f[R] ] \f[I]argument\f[R] +The password that is used to protect the integrity of the keystore. +.RS +If the modifier \f[CR]env\f[R] or \f[CR]file\f[R] isn\(aqt specified, +then the password has the value \f[I]argument\f[R], which must contain +at least six characters. +Otherwise, the password is retrieved as follows: +.IP \(bu 2 +\f[CR]env\f[R]: Retrieve the password from the environment variable +named \f[I]argument\f[R]. +.IP \(bu 2 +\f[CR]file\f[R]: Retrieve the password from the file named +\f[I]argument\f[R]. +\f[B]Note:\f[R] All other options that require passwords, such as +\f[CR]\-keypass\f[R], \f[CR]\-srckeypass\f[R], \f[CR]\-destkeypass\f[R], +\f[CR]\-srcstorepass\f[R], and \f[CR]\-deststorepass\f[R], accept the +\f[CR]env\f[R] and \f[CR]file\f[R] modifiers. +Remember to separate the password option and the modifier with a colon +(:). +The password must be provided to all commands that access the keystore +contents. +For such commands, when the \f[CR]\-storepass\f[R] option isn\(aqt +provided at the command line, the user is prompted for it. +When retrieving information from the keystore, the password is optional. +If a password is not specified, then the integrity of the retrieved +information can\(aqt be verified and a warning is displayed. +.RE +.TP +\f[CR]\-providername\f[R] \f[I]name\f[R] +Used to identify a cryptographic service provider\(aqs name when listed +in the security properties file. +.TP +\f[CR]\-addprovider\f[R] \f[I]name\f[R] +Used to add a security provider by name (such as SunPKCS11) . +.TP +\f[CR]\-providerclass\f[R] \f[I]class\f[R] +Used to specify the name of a cryptographic service provider\(aqs master +class file when the service provider isn\(aqt listed in the security +properties file. +.TP +\f[CR]\-providerpath\f[R] \f[I]list\f[R] +Used to specify the provider classpath. +.TP +\f[CR]\-providerarg\f[R] \f[I]arg\f[R] +Used with the \f[CR]\-addprovider\f[R] or \f[CR]\-providerclass\f[R] +option to represent an optional string input argument for the +constructor of \f[I]class\f[R] name. +.TP +\f[CR]\-protected=true\f[R]|\f[CR]false\f[R] +Specify this value as \f[CR]true\f[R] when a password must be specified +by way of a protected authentication path, such as a dedicated PIN +reader. +Because there are two keystores involved in the +\f[CR]\-importkeystore\f[R] command, the following two options, +\f[CR]\-srcprotected\f[R] and \f[CR]\-destprotected\f[R], are provided +for the source keystore and the destination keystore respectively. +.TP +\f[CR]\-ext\f[R] {\f[I]name\f[R]{\f[CR]:critical\f[R]} {\f[CR]=\f[R]\f[I]value\f[R]}} +Denotes an X.509 certificate extension. +The option can be used in \f[CR]\-genkeypair\f[R] and +\f[CR]\-gencert\f[R] to embed extensions into the generated certificate, +or in \f[CR]\-certreq\f[R] to show what extensions are requested in the +certificate request. +The option can appear multiple times. +The \f[I]name\f[R] argument can be a supported extension name (see +\f[B]Supported Named Extensions\f[R]) or an arbitrary OID number. +The \f[I]value\f[R] argument, when provided, denotes the argument for +the extension. +When \f[I]value\f[R] is omitted, the default value of the extension or +the extension itself requires no argument. +The \f[CR]:critical\f[R] modifier, when provided, means the +extension\(aqs \f[CR]isCritical\f[R] attribute is \f[CR]true\f[R]; +otherwise, it is \f[CR]false\f[R]. +You can use \f[CR]:c\f[R] in place of \f[CR]:critical\f[R]. +.TP +\f[CR]\-conf\f[R] \f[I]file\f[R] +Specifies a pre\-configured options file. +.SH PRE\-CONFIGURED OPTIONS FILE +A pre\-configured options file is a Java properties file that can be +specified with the \f[CR]\-conf\f[R] option. +Each property represents the default option(s) for a keytool command +using \(dqkeytool.\f[I]command_name\f[R]\(dq as the property name. +A special property named \(dqkeytool.all\(dq represents the default +option(s) applied to all commands. +A property value can include \f[CR]${prop}\f[R] which will be expanded +to the system property associated with it. +If an option value includes white spaces inside, it should be surrounded +by quotation marks (\(dq or \(aq). +All property names must be in lower case. +.PP +When \f[CR]keytool\f[R] is launched with a pre\-configured options file, +the value for \(dqkeytool.all\(dq (if it exists) is prepended to the +\f[CR]keytool\f[R] command line first, with the value for the command +name (if it exists) comes next, and the existing options on the command +line at last. +For a single\-valued option, this allows the property for a specific +command to override the \(dqkeytool.all\(dq value, and the value +specified on the command line to override both. +For multiple\-valued options, all of them will be used by +\f[CR]keytool\f[R]. +.PP +For example, given the following file named \f[CR]preconfig\f[R]: +.IP +.EX + # A tiny pre\-configured options file + keytool.all = \-keystore ${user.home}/ks + keytool.list = \-v + keytool.genkeypair = \-keyalg rsa +.EE +.PP +\f[CR]keytool \-conf preconfig \-list\f[R] is identical to +.RS +.PP +\f[CR]keytool \-keystore \(ti/ks \-v \-list\f[R] +.RE +.PP +\f[CR]keytool \-conf preconfig \-genkeypair \-alias me\f[R] is identical +to +.RS +.PP +\f[CR]keytool \-keystore \(ti/ks \-keyalg rsa \-genkeypair \-alias me\f[R] +.RE +.PP +\f[CR]keytool \-conf preconfig \-genkeypair \-alias you \-keyalg ec\f[R] +is identical to +.RS +.PP +\f[CR]keytool \-keystore \(ti/ks \-keyalg rsa \-genkeypair \-alias you \-keyalg ec\f[R] +.RE +.PP +which is equivalent to +.RS +.PP +\f[CR]keytool \-keystore \(ti/ks \-genkeypair \-alias you \-keyalg ec\f[R] +.RE +.PP +because \f[CR]\-keyalg\f[R] is a single\-valued option and the +\f[CR]ec\f[R] value specified on the command line overrides the +preconfigured options file. +.SH EXAMPLES OF OPTION VALUES +The following examples show the defaults for various option values: +.IP +.EX +\-alias \(dqmykey\(dq + +\-keysize + 2048 (when using \-genkeypair and \-keyalg is \(dqDSA\(dq) + 3072 (when using \-genkeypair and \-keyalg is \(dqRSA\(dq, \(dqRSASSA\-PSS\(dq, or \(dqDH\(dq) + 384 (when using \-genkeypair and \-keyalg is \(dqEC\(dq) + 56 (when using \-genseckey and \-keyalg is \(dqDES\(dq) + 168 (when using \-genseckey and \-keyalg is \(dqDESede\(dq) + +\-groupname + ed25519 (when using \-genkeypair and \-keyalg is \(dqEdDSA\(dq, key size is 255) + x25519 (when using \-genkeypair and \-keyalg is \(dqXDH\(dq, key size is 255) + +\-validity 90 + +\-keystore <the file named .keystore in the user\(aqs home directory> + +\-destkeystore <the file named .keystore in the user\(aqs home directory> + +\-storetype <the value of the \(dqkeystore.type\(dq property in the + security properties file, which is returned by the static + getDefaultType method in java.security.KeyStore> + +\-file + stdin (if reading) + stdout (if writing) + +\-protected false +.EE +.PP +When generating a certificate or a certificate request, the default +signature algorithm (\f[CR]\-sigalg\f[R] option) is derived from the +algorithm of the underlying private key to provide an appropriate level +of security strength as follows: +.PP +Default Signature Algorithms +.TS +tab(@); +l l l. +T{ +keyalg +T}@T{ +key size +T}@T{ +default sigalg +T} +_ +T{ +DSA +T}@T{ +any size +T}@T{ +SHA256withDSA +T} +T{ +RSA +T}@T{ +< 624 +T}@T{ +SHA256withRSA (key size is too small for using SHA\-384) +T} +T{ +T}@T{ +<= 7680 +T}@T{ +SHA384withRSA +T} +T{ +T}@T{ +> 7680 +T}@T{ +SHA512withRSA +T} +T{ +EC +T}@T{ +< 512 +T}@T{ +SHA384withECDSA +T} +T{ +T}@T{ +>= 512 +T}@T{ +SHA512withECDSA +T} +T{ +RSASSA\-PSS +T}@T{ +< 624 +T}@T{ +RSASSA\-PSS (with SHA\-256, key size is too small for +T} +T{ +T}@T{ +T}@T{ +using SHA\-384) +T} +T{ +T}@T{ +<= 7680 +T}@T{ +RSASSA\-PSS (with SHA\-384) +T} +T{ +T}@T{ +> 7680 +T}@T{ +RSASSA\-PSS (with SHA\-512) +T} +T{ +EdDSA +T}@T{ +255 +T}@T{ +Ed25519 +T} +T{ +T}@T{ +448 +T}@T{ +Ed448 +T} +T{ +Ed25519 +T}@T{ +255 +T}@T{ +Ed25519 +T} +T{ +Ed448 +T}@T{ +448 +T}@T{ +Ed448 +T} +.TE +.IP \(bu 2 +The key size, measured in bits, corresponds to the size of the private +key. +This size is determined by the value of the \f[CR]\-keysize\f[R] or +\f[CR]\-groupname\f[R] options or the value derived from a default +setting. +.IP \(bu 2 +An RSASSA\-PSS signature algorithm uses a \f[CR]MessageDigest\f[R] +algorithm as its hash and MGF1 algorithms. +.IP \(bu 2 +If neither a default \f[CR]\-keysize\f[R] or \f[CR]\-groupname\f[R] is +defined for an algorithm, the security provider will choose a default +setting. +.PP +\f[B]Note:\f[R] +.PP +To improve out of the box security, default keysize, groupname, and +signature algorithm names are periodically updated to stronger values +with each release of the JDK. +If interoperability with older releases of the JDK is important, make +sure that the defaults are supported by those releases. +Alternatively, you can use the \f[CR]\-keysize\f[R], +\f[CR]\-groupname\f[R], or \f[CR]\-sigalg\f[R] options to override the +default values at your own risk. +.SH SUPPORTED NAMED EXTENSIONS +The \f[CR]keytool\f[R] command supports these named extensions. +The names aren\(aqt case\-sensitive. +.TP +\f[CR]BC\f[R] or \f[CR]BasicConstraints\f[R] +Values: +.RS +The full form is +\f[CR]ca:\f[R]{\f[CR]true\f[R]|\f[CR]false\f[R]}[\f[CR],pathlen:\f[R]\f[I]len\f[R]] +or \f[I]len\f[R], which is short for +\f[CR]ca:true,pathlen:\f[R]\f[I]len\f[R]. +When \f[I]len\f[R] is omitted, the resulting value is +\f[CR]ca:true\f[R]. +.RE +.TP +\f[CR]KU\f[R] or \f[CR]KeyUsage\f[R] +Values: +.RS +\f[I]usage\f[R](\f[CR],\f[R] \f[I]usage\f[R])* +\f[I]usage\f[R] can be one of the following: +.IP \(bu 2 +\f[CR]digitalSignature\f[R] +.IP \(bu 2 +\f[CR]nonRepudiation\f[R] (\f[CR]contentCommitment\f[R]) +.IP \(bu 2 +\f[CR]keyEncipherment\f[R] +.IP \(bu 2 +\f[CR]dataEncipherment\f[R] +.IP \(bu 2 +\f[CR]keyAgreement\f[R] +.IP \(bu 2 +\f[CR]keyCertSign\f[R] +.IP \(bu 2 +\f[CR]cRLSign\f[R] +.IP \(bu 2 +\f[CR]encipherOnly\f[R] +.IP \(bu 2 +\f[CR]decipherOnly\f[R] +Provided there is no ambiguity, the \f[I]usage\f[R] argument can be +abbreviated with the first few letters (such as \f[CR]dig\f[R] for +\f[CR]digitalSignature\f[R]) or in camel\-case style (such as +\f[CR]dS\f[R] for \f[CR]digitalSignature\f[R] or \f[CR]cRLS\f[R] for +\f[CR]cRLSign\f[R]). +The \f[I]usage\f[R] values are case\-sensitive. +.RE +.TP +\f[CR]EKU\f[R] or \f[CR]ExtendedKeyUsage\f[R] +Values: +.RS +\f[I]usage\f[R](\f[CR],\f[R] \f[I]usage\f[R])* +\f[I]usage\f[R] can be one of the following: +.IP \(bu 2 +\f[CR]anyExtendedKeyUsage\f[R] +.IP \(bu 2 +\f[CR]serverAuth\f[R] +.IP \(bu 2 +\f[CR]clientAuth\f[R] +.IP \(bu 2 +\f[CR]codeSigning\f[R] +.IP \(bu 2 +\f[CR]emailProtection\f[R] +.IP \(bu 2 +\f[CR]timeStamping\f[R] +.IP \(bu 2 +\f[CR]OCSPSigning\f[R] +.IP \(bu 2 +Any OID string +Provided there is no ambiguity, the \f[I]usage\f[R] argument can be +abbreviated with the first few letters or in camel\-case style. +The \f[I]usage\f[R] values are case\-sensitive. +.RE +.TP +\f[CR]SAN\f[R] or \f[CR]SubjectAlternativeName\f[R] +Values: +.RS +\f[I]type\f[R]\f[CR]:\f[R]\f[I]value\f[R](\f[CR],\f[R] +\f[I]type\f[R]\f[CR]:\f[R]\f[I]value\f[R])* +\f[I]type\f[R] can be one of the following: +.IP \(bu 2 +\f[CR]EMAIL\f[R] +.IP \(bu 2 +\f[CR]URI\f[R] +.IP \(bu 2 +\f[CR]DNS\f[R] +.IP \(bu 2 +\f[CR]IP\f[R] +.IP \(bu 2 +\f[CR]OID\f[R] +The \f[I]value\f[R] argument is the string format value for the +\f[I]type\f[R]. +.RE +.TP +\f[CR]IAN\f[R] or \f[CR]IssuerAlternativeName\f[R] +Values: +.RS +Same as \f[CR]SAN\f[R] or \f[CR]SubjectAlternativeName\f[R]. +.RE +.TP +\f[CR]SIA\f[R] or \f[CR]SubjectInfoAccess\f[R] +Values: +.RS +\f[I]method\f[R]\f[CR]:\f[R]\f[I]location\-type\f[R]\f[CR]:\f[R]\f[I]location\-value\f[R](\f[CR],\f[R] +\f[I]method\f[R]\f[CR]:\f[R]\f[I]location\-type\f[R]\f[CR]:\f[R]\f[I]location\-value\f[R])* +\f[I]method\f[R] can be one of the following: +.IP \(bu 2 +\f[CR]timeStamping\f[R] +.IP \(bu 2 +\f[CR]caRepository\f[R] +.IP \(bu 2 +Any OID +The \f[I]location\-type\f[R] and \f[I]location\-value\f[R] arguments can +be any \f[I]type\f[R]\f[CR]:\f[R]\f[I]value\f[R] supported by the +\f[CR]SubjectAlternativeName\f[R] extension. +.RE +.TP +\f[CR]AIA\f[R] or \f[CR]AuthorityInfoAccess\f[R] +Values: +.RS +Same as \f[CR]SIA\f[R] or \f[CR]SubjectInfoAccess\f[R]. +The \f[I]method\f[R] argument can be one of the following: +.IP \(bu 2 +\f[CR]ocsp\f[R] +.IP \(bu 2 +\f[CR]caIssuers\f[R] +.IP \(bu 2 +Any OID +.RE +.PP +When \f[I]name\f[R] is OID, the value is the hexadecimal dumped Definite +Encoding Rules (DER) encoding of the \f[CR]extnValue\f[R] for the +extension excluding the OCTET STRING type and length bytes. +Other than standard hexadecimal numbers (0\-9, a\-f, A\-F), any extra +characters are ignored in the HEX string. +Therefore, both 01:02:03:04 and 01020304 are accepted as identical +values. +When there is no value, the extension has an empty value field. +.PP +A special name \f[CR]honored\f[R], used only in \f[CR]\-gencert\f[R], +denotes how the extensions included in the certificate request should be +honored. +The value for this name is a comma\-separated list of \f[CR]all\f[R] +(all requested extensions are honored), +\f[I]name\f[R]{\f[CR]:\f[R][\f[CR]critical\f[R]|\f[CR]non\-critical\f[R]]} +(the named extension is honored, but it uses a different +\f[CR]isCritical\f[R] attribute), and \f[CR]\-name\f[R] (used with +\f[CR]all\f[R], denotes an exception). +Requested extensions aren\(aqt honored by default. +.PP +If, besides the\f[CR]\-ext honored\f[R] option, another named or OID +\f[CR]\-ext\f[R] option is provided, this extension is added to those +already honored. +However, if this name (or OID) also appears in the honored value, then +its value and criticality override that in the request. +If an extension of the same type is provided multiple times through +either a name or an OID, only the last extension is used. +.PP +The \f[CR]subjectKeyIdentifier\f[R] extension is always created. +For non\-self\-signed certificates, the +\f[CR]authorityKeyIdentifier\f[R] is created. +.PP +\f[B]CAUTION:\f[R] +.PP +Users should be aware that some combinations of extensions (and other +certificate fields) may not conform to the Internet standard. +See \f[B]Certificate Conformance Warning\f[R]. +.SH EXAMPLES OF TASKS IN CREATING A KEYSTORE +The following examples describe the sequence actions in creating a +keystore for managing public/private key pairs and certificates from +trusted entities. +.IP \(bu 2 +\f[B]Generating the Key Pair\f[R] +.IP \(bu 2 +\f[B]Requesting a Signed Certificate from a CA\f[R] +.IP \(bu 2 +\f[B]Importing a Certificate for the CA\f[R] +.IP \(bu 2 +\f[B]Importing the Certificate Reply from the CA\f[R] +.IP \(bu 2 +\f[B]Exporting a Certificate That Authenticates the Public Key\f[R] +.IP \(bu 2 +\f[B]Importing the Keystore\f[R] +.IP \(bu 2 +\f[B]Generating Certificates for an SSL Server\f[R] +.SH GENERATING THE KEY PAIR +Create a keystore and then generate the key pair. +.PP +You can enter the command as a single line such as the following: +.RS +.PP +\f[CR]keytool \-genkeypair \-dname \(dqcn=myname, ou=mygroup, o=mycompany, c=mycountry\(dq \-alias business \-keyalg rsa \-keypass\f[R] +\f[I]password\f[R] +\f[CR]\-keystore /working/mykeystore \-storepass password \-validity 180\f[R] +.RE +.PP +The command creates the keystore named \f[CR]mykeystore\f[R] in the +working directory (provided it doesn\(aqt already exist), and assigns it +the password specified by \f[CR]\-keypass\f[R]. +It generates a public/private key pair for the entity whose +distinguished name is \f[CR]myname\f[R], \f[CR]mygroup\f[R], +\f[CR]mycompany\f[R], and a two\-letter country code of +\f[CR]mycountry\f[R]. +It uses the RSA key generation algorithm to create the keys; both are +3072 bits. +.PP +The command uses the default SHA384withRSA signature algorithm to create +a self\-signed certificate that includes the public key and the +distinguished name information. +The certificate is valid for 180 days, and is associated with the +private key in a keystore entry referred to by +\f[CR]\-alias business\f[R]. +The private key is assigned the password specified by +\f[CR]\-keypass\f[R]. +.PP +The command is significantly shorter when the option defaults are +accepted. +In this case, only \f[CR]\-keyalg\f[R] is required, and the defaults are +used for unspecified options that have default values. +You are prompted for any required values. +You could have the following: +.RS +.PP +\f[CR]keytool \-genkeypair \-keyalg rsa\f[R] +.RE +.PP +In this case, a keystore entry with the alias \f[CR]mykey\f[R] is +created, with a newly generated key pair and a certificate that is valid +for 90 days. +This entry is placed in your home directory in a keystore named +\f[CR].keystore\f[R] . +\f[CR].keystore\f[R] is created if it doesn\(aqt already exist. +You are prompted for the distinguished name information, the keystore +password, and the private key password. +.PP +\f[B]Note:\f[R] +.PP +The rest of the examples assume that you responded to the prompts with +values equal to those specified in the first \f[CR]\-genkeypair\f[R] +command. +For example, a distinguished name of +\f[CR]cn=\f[R]\f[I]myname\f[R]\f[CR], ou=\f[R]\f[I]mygroup\f[R]\f[CR], o=\f[R]\f[I]mycompany\f[R]\f[CR], c=\f[R]\f[I]mycountry\f[R]. +.SH REQUESTING A SIGNED CERTIFICATE FROM A CA +\f[B]Note:\f[R] +.PP +Generating the key pair created a self\-signed certificate; however, a +certificate is more likely to be trusted by others when it is signed by +a CA. +.PP +To get a CA signature, complete the following process: +.IP "1." 3 +Generate a CSR: +.RS 4 +.RS +.PP +\f[CR]keytool \-certreq \-file myname.csr\f[R] +.RE +.PP +This creates a CSR for the entity identified by the default alias +\f[CR]mykey\f[R] and puts the request in the file named +\f[CR]myname.csr\f[R]. +.RE +.IP "2." 3 +Submit \f[CR]myname.csr\f[R] to a CA, such as DigiCert. +.PP +The CA authenticates you, the requestor (usually offline), and returns a +certificate, signed by them, authenticating your public key. +In some cases, the CA returns a chain of certificates, each one +authenticating the public key of the signer of the previous certificate +in the chain. +.SH IMPORTING A CERTIFICATE FOR THE CA +To import a certificate for the CA, complete the following process: +.IP "1." 3 +Before you import the certificate reply from a CA, you need one or more +trusted certificates either in your keystore or in the +\f[CR]cacerts\f[R] keystore file. +See \f[CR]\-importcert\f[R] in \f[B]Commands\f[R]. +.RS 4 +.IP \(bu 2 +If the certificate reply is a certificate chain, then you need the top +certificate of the chain. +The root CA certificate that authenticates the public key of the CA. +.IP \(bu 2 +If the certificate reply is a single certificate, then you need a +certificate for the issuing CA (the one that signed it). +If that certificate isn\(aqt self\-signed, then you need a certificate +for its signer, and so on, up to a self\-signed root CA certificate. +.PP +The \f[CR]cacerts\f[R] keystore ships with a set of root certificates +issued by the CAs of \f[B]the Oracle Java Root Certificate program\f[R] +[https://www.oracle.com/java/technologies/javase/carootcertsprogram.html]. +If you request a signed certificate from a CA, and a certificate +authenticating that CA\(aqs public key hasn\(aqt been added to +\f[CR]cacerts\f[R], then you must import a certificate from that CA as a +trusted certificate. +.PP +A certificate from a CA is usually self\-signed or signed by another CA. +If it is signed by another CA, you need a certificate that authenticates +that CA\(aqs public key. +.PP +For example, you have obtained a \f[I]X\f[R]\f[CR].cer\f[R] file from a +company that is a CA and the file is supposed to be a self\-signed +certificate that authenticates that CA\(aqs public key. +Before you import it as a trusted certificate, you should ensure that +the certificate is valid by: +.IP "1." 3 +Viewing it with the \f[CR]keytool \-printcert\f[R] command or the +\f[CR]keytool \-importcert\f[R] command without using the +\f[CR]\-noprompt\f[R] option. +Make sure that the displayed certificate fingerprints match the expected +fingerprints. +.IP "2." 3 +Calling the person who sent the certificate, and comparing the +fingerprints that you see with the ones that they show or that a secure +public key repository shows. +.PP +Only when the fingerprints are equal is it assured that the certificate +wasn\(aqt replaced in transit with somebody else\(aqs certificate (such +as an attacker\(aqs certificate). +If such an attack takes place, and you didn\(aqt check the certificate +before you imported it, then you would be trusting anything that the +attacker signed. +.RE +.IP "2." 3 +Replace the self\-signed certificate with a certificate chain, where +each certificate in the chain authenticates the public key of the signer +of the previous certificate in the chain, up to a root CA. +.RS 4 +.PP +If you trust that the certificate is valid, then you can add it to your +keystore by entering the following command: +.RS +.PP +\f[CR]keytool \-importcert \-alias\f[R] \f[I]alias\f[R] +\f[CR]\-file *X*\f[R].cer\(ga +.RE +.PP +This command creates a trusted certificate entry in the keystore from +the data in the CA certificate file and assigns the values of the +\f[I]alias\f[R] to the entry. +.RE +.SH IMPORTING THE CERTIFICATE REPLY FROM THE CA +After you import a certificate that authenticates the public key of the +CA that you submitted your certificate signing request to (or there is +already such a certificate in the \f[CR]cacerts\f[R] file), you can +import the certificate reply and replace your self\-signed certificate +with a certificate chain. +.PP +The certificate chain is one of the following: +.IP \(bu 2 +Returned by the CA when the CA reply is a chain. +.IP \(bu 2 +Constructed when the CA reply is a single certificate. +This certificate chain is constructed by using the certificate reply and +trusted certificates available either in the keystore where you import +the reply or in the \f[CR]cacerts\f[R] keystore file. +.PP +For example, if you sent your certificate signing request to DigiCert, +then you can import their reply by entering the following command: +.PP +\f[B]Note:\f[R] +.PP +In this example, the returned certificate is named +\f[CR]DCmyname.cer\f[R]. +.RS +.PP +\f[CR]keytool \-importcert \-trustcacerts \-file DCmyname.cer\f[R] +.RE +.SH EXPORTING A CERTIFICATE THAT AUTHENTICATES THE PUBLIC KEY +\f[B]Note:\f[R] +.PP +If you used the \f[CR]jarsigner\f[R] command to sign a Java Archive +(JAR) file, then clients that use the file will want to authenticate +your signature. +.PP +One way that clients can authenticate you is by importing your public +key certificate into their keystore as a trusted entry. +You can then export the certificate and supply it to your clients. +.PP +For example: +.IP "1." 3 +Copy your certificate to a file named \f[CR]myname.cer\f[R] by entering +the following command: +.RS 4 +.PP +\f[B]Note:\f[R] +.PP +In this example, the entry has an alias of \f[CR]mykey\f[R]. +.RS +.PP +\f[CR]keytool \-exportcert \-alias mykey \-file myname.cer\f[R] +.RE +.RE +.IP "2." 3 +With the certificate and the signed JAR file, a client can use the +\f[CR]jarsigner\f[R] command to authenticate your signature. +.SH IMPORTING THE KEYSTORE +Use the \f[CR]importkeystore\f[R] command to import an entire keystore +into another keystore. +This imports all entries from the source keystore, including keys and +certificates, to the destination keystore with a single command. +You can use this command to import entries from a different type of +keystore. +During the import, all new entries in the destination keystore will have +the same alias names and protection passwords (for secret keys and +private keys). +If the \f[CR]keytool\f[R] command can\(aqt recover the private keys or +secret keys from the source keystore, then it prompts you for a +password. +If it detects alias duplication, then it asks you for a new alias, and +you can specify a new alias or simply allow the \f[CR]keytool\f[R] +command to overwrite the existing one. +.PP +For example, import entries from a typical JKS type keystore +\f[CR]key.jks\f[R] into a PKCS #11 type hardware\-based keystore, by +entering the following command: +.RS +.PP +\f[CR]keytool \-importkeystore \-srckeystore key.jks \-destkeystore NONE \-srcstoretype JKS \-deststoretype PKCS11 \-srcstorepass\f[R] +\f[I]password\f[R] \f[CR]\-deststorepass\f[R] \f[I]password\f[R] +.RE +.PP +The \f[CR]importkeystore\f[R] command can also be used to import a +single entry from a source keystore to a destination keystore. +In this case, besides the options you used in the previous example, you +need to specify the alias you want to import. +With the \f[CR]\-srcalias\f[R] option specified, you can also specify +the destination alias name, protection password for a secret or private +key, and the destination protection password you want as follows: +.RS +.PP +\f[CR]keytool \-importkeystore \-srckeystore key.jks \-destkeystore NONE \-srcstoretype JKS \-deststoretype PKCS11 \-srcstorepass\f[R] +\f[I]password\f[R] \f[CR]\-deststorepass\f[R] \f[I]password\f[R] +\f[CR]\-srcalias myprivatekey \-destalias myoldprivatekey \-srckeypass\f[R] +\f[I]password\f[R] \f[CR]\-destkeypass\f[R] \f[I]password\f[R] +\f[CR]\-noprompt\f[R] +.RE +.SH GENERATING CERTIFICATES FOR AN SSL SERVER +The following are \f[CR]keytool\f[R] commands used to generate key pairs +and certificates for three entities: +.IP \(bu 2 +Root CA (\f[CR]root\f[R]) +.IP \(bu 2 +Intermediate CA (\f[CR]ca\f[R]) +.IP \(bu 2 +SSL server (\f[CR]server\f[R]) +.PP +Ensure that you store all the certificates in the same keystore. +.IP +.EX +keytool \-genkeypair \-keystore root.jks \-alias root \-ext bc:c \-keyalg rsa +keytool \-genkeypair \-keystore ca.jks \-alias ca \-ext bc:c \-keyalg rsa +keytool \-genkeypair \-keystore server.jks \-alias server \-keyalg rsa + +keytool \-keystore root.jks \-alias root \-exportcert \-rfc > root.pem + +keytool \-storepass password \-keystore ca.jks \-certreq \-alias ca | + keytool \-storepass password \-keystore root.jks + \-gencert \-alias root \-ext BC=0 \-rfc > ca.pem +keytool \-keystore ca.jks \-importcert \-alias ca \-file ca.pem + +keytool \-storepass password \-keystore server.jks \-certreq \-alias server | + keytool \-storepass password \-keystore ca.jks \-gencert \-alias ca + \-ext ku:c=dig,kE \-rfc > server.pem +cat root.pem ca.pem server.pem | + keytool \-keystore server.jks \-importcert \-alias server +.EE +.SH TERMS +.TP +Keystore +A keystore is a storage facility for cryptographic keys and +certificates. +.TP +Keystore entries +Keystores can have different types of entries. +The two most applicable entry types for the \f[CR]keytool\f[R] command +include the following: +.RS +Key entries: Each entry holds very sensitive cryptographic key +information, which is stored in a protected format to prevent +unauthorized access. +Typically, a key stored in this type of entry is a secret key, or a +private key accompanied by the certificate chain for the corresponding +public key. +See \f[B]Certificate Chains\f[R]. +The \f[CR]keytool\f[R] command can handle both types of entries, while +the \f[CR]jarsigner\f[R] tool only handles the latter type of entry, +that is private keys and their associated certificate chains. +Trusted certificate entries: Each entry contains a single public key +certificate that belongs to another party. +The entry is called a trusted certificate because the keystore owner +trusts that the public key in the certificate belongs to the identity +identified by the subject (owner) of the certificate. +The issuer of the certificate vouches for this, by signing the +certificate. +.RE +.TP +Keystore aliases +All keystore entries (key and trusted certificate entries) are accessed +by way of unique aliases. +.RS +An alias is specified when you add an entity to the keystore with the +\f[CR]\-genseckey\f[R] command to generate a secret key, the +\f[CR]\-genkeypair\f[R] command to generate a key pair (public and +private key), or the \f[CR]\-importcert\f[R] command to add a +certificate or certificate chain to the list of trusted certificates. +Subsequent \f[CR]keytool\f[R] commands must use this same alias to refer +to the entity. +For example, you can use the alias \f[CR]duke\f[R] to generate a new +public/private key pair and wrap the public key into a self\-signed +certificate with the following command. +See \f[B]Certificate Chains\f[R]. +.RS +.PP +\f[CR]keytool \-genkeypair \-alias duke \-keyalg rsa \-keypass\f[R] +\f[I]passwd\f[R] +.RE +This example specifies an initial \f[I]passwd\f[R] required by +subsequent commands to access the private key associated with the alias +\f[CR]duke\f[R]. +If you later want to change Duke\(aqs private key password, use a +command such as the following: +.RS +.PP +\f[CR]keytool \-keypasswd \-alias duke \-keypass\f[R] \f[I]passwd\f[R] +\f[CR]\-new\f[R] \f[I]newpasswd\f[R] +.RE +This changes the initial \f[I]passwd\f[R] to \f[I]newpasswd\f[R]. +A password shouldn\(aqt be specified on a command line or in a script +unless it is for testing purposes, or you are on a secure system. +If you don\(aqt specify a required password option on a command line, +then you are prompted for it. +.RE +.TP +Keystore implementation +The \f[CR]KeyStore\f[R] class provided in the \f[CR]java.security\f[R] +package supplies well\-defined interfaces to access and modify the +information in a keystore. +It is possible for there to be multiple different concrete +implementations, where each implementation is that for a particular type +of keystore. +.RS +Currently, two command\-line tools (\f[CR]keytool\f[R] and +\f[CR]jarsigner\f[R]) make use of keystore implementations. +Because the \f[CR]KeyStore\f[R] class is \f[CR]public\f[R], users can +write additional security applications that use it. +In JDK 9 and later, the default keystore implementation is +\f[CR]PKCS12\f[R]. +This is a cross platform keystore based on the RSA PKCS12 Personal +Information Exchange Syntax Standard. +This standard is primarily meant for storing or transporting a user\(aqs +private keys, certificates, and miscellaneous secrets. +There is another built\-in implementation, provided by Oracle. +It implements the keystore as a file with a proprietary keystore type +(format) named \f[CR]JKS\f[R]. +It protects each private key with its individual password, and also +protects the integrity of the entire keystore with a (possibly +different) password. +Keystore implementations are provider\-based. +More specifically, the application interfaces supplied by +\f[CR]KeyStore\f[R] are implemented in terms of a Service Provider +Interface (SPI). +That is, there is a corresponding abstract \f[CR]KeystoreSpi\f[R] class, +also in the \f[CR]java.security package\f[R], which defines the Service +Provider Interface methods that providers must implement. +The term \f[I]provider\f[R] refers to a package or a set of packages +that supply a concrete implementation of a subset of services that can +be accessed by the Java Security API. +To provide a keystore implementation, clients must implement a provider +and supply a \f[CR]KeystoreSpi\f[R] subclass implementation, as +described in Steps to Implement and Integrate a Provider. +Applications can choose different types of keystore implementations from +different providers, using the \f[CR]getInstance\f[R] factory method +supplied in the \f[CR]KeyStore\f[R] class. +A keystore type defines the storage and data format of the keystore +information, and the algorithms used to protect private/secret keys in +the keystore and the integrity of the keystore. +Keystore implementations of different types aren\(aqt compatible. +The \f[CR]keytool\f[R] command works on any file\-based keystore +implementation. +It treats the keystore location that is passed to it at the command line +as a file name and converts it to a \f[CR]FileInputStream\f[R], from +which it loads the keystore information. +The \f[CR]jarsigner\f[R] commands can read a keystore from any location +that can be specified with a URL. +For \f[CR]keytool\f[R] and \f[CR]jarsigner\f[R], you can specify a +keystore type at the command line, with the \f[CR]\-storetype\f[R] +option. +If you don\(aqt explicitly specify a keystore type, then the tools +choose a keystore implementation based on the value of the +\f[CR]keystore.type\f[R] property specified in the security properties +file. +The security properties file is called \f[CR]java.security\f[R], and +resides in the security properties directory: +.IP \(bu 2 +\f[B]Linux and macOS:\f[R] \f[CR]java.home/lib/security\f[R] +.IP \(bu 2 +\f[B]Windows:\f[R] \f[CR]java.home\(rslib\(rssecurity\f[R] +Each tool gets the \f[CR]keystore.type\f[R] value and then examines all +the currently installed providers until it finds one that implements a +keystores of that type. +It then uses the keystore implementation from that provider.The +\f[CR]KeyStore\f[R] class defines a static method named +\f[CR]getDefaultType\f[R] that lets applications retrieve the value of +the \f[CR]keystore.type\f[R] property. +The following line of code creates an instance of the default keystore +type as specified in the \f[CR]keystore.type\f[R] property: +.RS +.PP +\f[CR]KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());\f[R] +.RE +The default keystore type is \f[CR]pkcs12\f[R], which is a +cross\-platform keystore based on the RSA PKCS12 Personal Information +Exchange Syntax Standard. +This is specified by the following line in the security properties file: +.RS +.PP +\f[CR]keystore.type=pkcs12\f[R] +.RE +To have the tools utilize a keystore implementation other than the +default, you can change that line to specify a different keystore type. +For example, if you want to use the Oracle\(aqs \f[CR]jks\f[R] keystore +implementation, then change the line to the following: +.RS +.PP +\f[CR]keystore.type=jks\f[R] +.RE +\f[B]Note:\f[R] +Case doesn\(aqt matter in keystore type designations. +For example, \f[CR]JKS\f[R] would be considered the same as +\f[CR]jks\f[R]. +.RE +.TP +Certificate +A certificate (or public\-key certificate) is a digitally signed +statement from one entity (the issuer), saying that the public key and +some other information of another entity (the subject) has some specific +value. +The following terms are related to certificates: +.RS +.IP \(bu 2 +Public Keys: These are numbers associated with a particular entity, and +are intended to be known to everyone who needs to have trusted +interactions with that entity. +Public keys are used to verify signatures. +.IP \(bu 2 +Digitally Signed: If some data is digitally signed, then it is stored +with the identity of an entity and a signature that proves that entity +knows about the data. +The data is rendered unforgeable by signing with the entity\(aqs private +key. +.IP \(bu 2 +Identity: A known way of addressing an entity. +In some systems, the identity is the public key, and in others it can be +anything from an Oracle Solaris UID to an email address to an X.509 +distinguished name. +.IP \(bu 2 +Signature: A signature is computed over some data using the private key +of an entity. +The signer, which in the case of a certificate is also known as the +issuer. +.IP \(bu 2 +Private Keys: These are numbers, each of which is supposed to be known +only to the particular entity whose private key it is (that is, it is +supposed to be kept secret). +Private and public keys exist in pairs in all public key cryptography +systems (also referred to as public key crypto systems). +In a typical public key crypto system, such as DSA, a private key +corresponds to exactly one public key. +Private keys are used to compute signatures. +.IP \(bu 2 +Entity: An entity is a person, organization, program, computer, +business, bank, or something else you are trusting to some degree. +Public key cryptography requires access to users\(aq public keys. +In a large\-scale networked environment, it is impossible to guarantee +that prior relationships between communicating entities were established +or that a trusted repository exists with all used public keys. +Certificates were invented as a solution to this public key distribution +problem. +Now a Certification Authority (CA) can act as a trusted third party. +CAs are entities such as businesses that are trusted to sign (issue) +certificates for other entities. +It is assumed that CAs only create valid and reliable certificates +because they are bound by legal agreements. +There are many public Certification Authorities, such as DigiCert, +Comodo, Entrust, and so on. +You can also run your own Certification Authority using products such as +Microsoft Certificate Server or the Entrust CA product for your +organization. +With the \f[CR]keytool\f[R] command, it is possible to display, import, +and export certificates. +It is also possible to generate self\-signed certificates. +The \f[CR]keytool\f[R] command currently handles X.509 certificates. +.RE +.TP +X.509 Certificates +The X.509 standard defines what information can go into a certificate +and describes how to write it down (the data format). +All the data in a certificate is encoded with two related standards +called ASN.1/DER. +Abstract Syntax Notation 1 describes data. +The Definite Encoding Rules describe a single way to store and transfer +that data. +.RS +All X.509 certificates have the following data, in addition to the +signature: +.IP \(bu 2 +Version: This identifies which version of the X.509 standard applies to +this certificate, which affects what information can be specified in it. +Thus far, three versions are defined. +The \f[CR]keytool\f[R] command can import and export v1, v2, and v3 +certificates. +It generates v3 certificates. +.RS 2 +.IP \(bu 2 +X.509 Version 1 has been available since 1988, is widely deployed, and +is the most generic. +.IP \(bu 2 +X.509 Version 2 introduced the concept of subject and issuer unique +identifiers to handle the possibility of reuse of subject or issuer +names over time. +Most certificate profile documents strongly recommend that names not be +reused and that certificates shouldn\(aqt make use of unique +identifiers. +Version 2 certificates aren\(aqt widely used. +.IP \(bu 2 +X.509 Version 3 is the most recent (1996) and supports the notion of +extensions where anyone can define an extension and include it in the +certificate. +Some common extensions are: KeyUsage (limits the use of the keys to +particular purposes such as \f[CR]signing\-only\f[R]) and +AlternativeNames (allows other identities to also be associated with +this public key, for example. +DNS names, email addresses, IP addresses). +Extensions can be marked critical to indicate that the extension should +be checked and enforced or used. +For example, if a certificate has the KeyUsage extension marked critical +and set to \f[CR]keyCertSign\f[R], then when this certificate is +presented during SSL communication, it should be rejected because the +certificate extension indicates that the associated private key should +only be used for signing certificates and not for SSL use. +.RE +.IP \(bu 2 +Serial number: The entity that created the certificate is responsible +for assigning it a serial number to distinguish it from other +certificates it issues. +This information is used in numerous ways. +For example, when a certificate is revoked its serial number is placed +in a Certificate Revocation List (CRL). +.IP \(bu 2 +Signature algorithm identifier: This identifies the algorithm used by +the CA to sign the certificate. +.IP \(bu 2 +Issuer name: The X.500 Distinguished Name of the entity that signed the +certificate. +This is typically a CA. +Using this certificate implies trusting the entity that signed this +certificate. +In some cases, such as root or top\-level CA certificates, the issuer +signs its own certificate. +.IP \(bu 2 +Validity period: Each certificate is valid only for a limited amount of +time. +This period is described by a start date and time and an end date and +time, and can be as short as a few seconds or almost as long as a +century. +The validity period chosen depends on a number of factors, such as the +strength of the private key used to sign the certificate, or the amount +one is willing to pay for a certificate. +This is the expected period that entities can rely on the public value, +when the associated private key has not been compromised. +.IP \(bu 2 +Subject name: The name of the entity whose public key the certificate +identifies. +This name uses the X.500 standard, so it is intended to be unique across +the Internet. +This is the X.500 Distinguished Name (DN) of the entity. +For example, +.RS 2 +.RS +.PP +\f[CR]CN=Java Duke, OU=Java Software Division, O=Oracle Corporation, C=US\f[R] +.RE +.PP +These refer to the subject\(aqs common name (CN), organizational unit +(OU), organization (O), and country (C). +.RE +.IP \(bu 2 +Subject public key information: This is the public key of the entity +being named with an algorithm identifier that specifies which public key +crypto system this key belongs to and any associated key parameters. +.RE +.TP +Certificate Chains +The \f[CR]keytool\f[R] command can create and manage keystore key +entries that each contain a private key and an associated certificate +chain. +The first certificate in the chain contains the public key that +corresponds to the private key. +.RS +When keys are first generated, the chain usually starts off containing a +single element, a self\-signed certificate. +See \-genkeypair in \f[B]Commands\f[R]. +A self\-signed certificate is one for which the issuer (signer) is the +same as the subject. +The subject is the entity whose public key is being authenticated by the +certificate. +When the \f[CR]\-genkeypair\f[R] command is called to generate a new +public/private key pair, it also wraps the public key into a +self\-signed certificate (unless the \f[CR]\-signer\f[R] option is +specified). +Later, after a Certificate Signing Request (CSR) was generated with the +\f[CR]\-certreq\f[R] command and sent to a Certification Authority (CA), +the response from the CA is imported with \f[CR]\-importcert\f[R], and +the self\-signed certificate is replaced by a chain of certificates. +At the bottom of the chain is the certificate (reply) issued by the CA +authenticating the subject\(aqs public key. +The next certificate in the chain is one that authenticates the CA\(aqs +public key. +In many cases, this is a self\-signed certificate, which is a +certificate from the CA authenticating its own public key, and the last +certificate in the chain. +In other cases, the CA might return a chain of certificates. +In this case, the bottom certificate in the chain is the same (a +certificate signed by the CA, authenticating the public key of the key +entry), but the second certificate in the chain is a certificate signed +by a different CA that authenticates the public key of the CA you sent +the CSR to. +The next certificate in the chain is a certificate that authenticates +the second CA\(aqs key, and so on, until a self\-signed root certificate +is reached. +Each certificate in the chain (after the first) authenticates the public +key of the signer of the previous certificate in the chain. +Many CAs only return the issued certificate, with no supporting chain, +especially when there is a flat hierarchy (no intermediates CAs). +In this case, the certificate chain must be established from trusted +certificate information already stored in the keystore. +A different reply format (defined by the PKCS #7 standard) includes the +supporting certificate chain in addition to the issued certificate. +Both reply formats can be handled by the \f[CR]keytool\f[R] command. +The top\-level (root) CA certificate is self\-signed. +However, the trust into the root\(aqs public key doesn\(aqt come from +the root certificate itself, but from other sources such as a newspaper. +This is because anybody could generate a self\-signed certificate with +the distinguished name of, for example, the DigiCert root CA. +The root CA public key is widely known. +The only reason it is stored in a certificate is because this is the +format understood by most tools, so the certificate in this case is only +used as a vehicle to transport the root CA\(aqs public key. +Before you add the root CA certificate to your keystore, you should view +it with the \f[CR]\-printcert\f[R] option and compare the displayed +fingerprint with the well\-known fingerprint obtained from a newspaper, +the root CA\(aqs Web page, and so on. +.RE +.TP +cacerts Certificates File +A certificates file named \f[CR]cacerts\f[R] resides in the security +properties directory: +.RS +.IP \(bu 2 +\f[B]Linux and macOS:\f[R] \f[I]JAVA_HOME\f[R]\f[CR]/lib/security\f[R] +.IP \(bu 2 +\f[B]Windows:\f[R] \f[I]JAVA_HOME\f[R]\f[CR]\(rslib\(rssecurity\f[R] +The \f[CR]cacerts\f[R] file represents a system\-wide keystore with CA +certificates. +System administrators can configure and manage that file with the +\f[CR]keytool\f[R] command by specifying \f[CR]jks\f[R] as the keystore +type. +The \f[CR]cacerts\f[R] keystore file ships with a default set of root CA +certificates. +For Linux, macOS, and Windows, you can list the default certificates +with the following command: +.RS +.PP +\f[CR]keytool \-list \-cacerts\f[R] +.RE +The initial password of the \f[CR]cacerts\f[R] keystore file is +\f[CR]changeit\f[R]. +System administrators should change that password and the default access +permission of that file upon installing the SDK. +\f[B]Note:\f[R] +It is important to verify your \f[CR]cacerts\f[R] file. +Because you trust the CAs in the \f[CR]cacerts\f[R] file as entities for +signing and issuing certificates to other entities, you must manage the +\f[CR]cacerts\f[R] file carefully. +The \f[CR]cacerts\f[R] file should contain only certificates of the CAs +you trust. +It is your responsibility to verify the trusted root CA certificates +bundled in the \f[CR]cacerts\f[R] file and make your own trust +decisions. +To remove an untrusted CA certificate from the \f[CR]cacerts\f[R] file, +use the \f[CR]\-delete\f[R] option of the \f[CR]keytool\f[R] command. +You can find the \f[CR]cacerts\f[R] file in the JDK\(aqs +\f[CR]$JAVA_HOME/lib/security\f[R] directory. +Contact your system administrator if you don\(aqt have permission to +edit this file. +.RE +.TP +Internet RFC 1421 Certificate Encoding Standard +Certificates are often stored using the printable encoding format +defined by the Internet RFC 1421 standard, instead of their binary +encoding. +This certificate format, also known as Base64 encoding, makes it easy to +export certificates to other applications by email or through some other +mechanism. +.RS +Certificates read by the \f[CR]\-importcert\f[R] and +\f[CR]\-printcert\f[R] commands can be in either this format or binary +encoded. +The \f[CR]\-exportcert\f[R] command by default outputs a certificate in +binary encoding, but will instead output a certificate in the printable +encoding format, when the \f[CR]\-rfc\f[R] option is specified. +The \f[CR]\-list\f[R] command by default prints the SHA\-256 fingerprint +of a certificate. +If the \f[CR]\-v\f[R] option is specified, then the certificate is +printed in human\-readable format. +If the \f[CR]\-rfc\f[R] option is specified, then the certificate is +output in the printable encoding format. +In its printable encoding format, the encoded certificate is bounded at +the beginning and end by the following text: +.IP +.EX +\-\-\-\-\-BEGIN CERTIFICATE\-\-\-\-\- + +encoded certificate goes here. + +\-\-\-\-\-END CERTIFICATE\-\-\-\-\- +.EE +.RE +.TP +X.500 Distinguished Names +X.500 Distinguished Names are used to identify entities, such as those +that are named by the \f[CR]subject\f[R] and \f[CR]issuer\f[R] (signer) +fields of X.509 certificates. +The \f[CR]keytool\f[R] command supports the following subparts: +.RS +.IP \(bu 2 +commonName: The common name of a person such as Susan Jones. +.IP \(bu 2 +organizationUnit: The small organization (such as department or +division) name. +For example, Purchasing. +.IP \(bu 2 +localityName: The locality (city) name, for example, Palo Alto. +.IP \(bu 2 +stateName: State or province name, for example, California. +.IP \(bu 2 +country: Two\-letter country code, for example, CH. +When you supply a distinguished name string as the value of a +\f[CR]\-dname\f[R] option, such as for the \f[CR]\-genkeypair\f[R] +command, the string must be in the following format: +.RS +.PP +\f[CR]CN=cName, OU=orgUnit, O=org, L=city, S=state, C=countryCode\f[R] +.RE +All the following items represent actual values and the previous +keywords are abbreviations for the following: +.IP +.EX +CN=commonName +OU=organizationUnit +O=organizationName +L=localityName +S=stateName +C=country +.EE +A sample distinguished name string is: +.RS +.PP +\f[CR]CN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US\f[R] +.RE +A sample command using such a string is: +.RS +.PP +\f[CR]keytool \-genkeypair \-dname \(dqCN=Mark Smith, OU=Java, O=Oracle, L=Cupertino, S=California, C=US\(dq \-alias mark \-keyalg rsa\f[R] +.RE +Case doesn\(aqt matter for the keyword abbreviations. +For example, CN, cn, and Cn are all treated the same. +Order matters; each subcomponent must appear in the designated order. +However, it isn\(aqt necessary to have all the subcomponents. +You can use a subset, for example: +.RS +.PP +\f[CR]CN=Smith, OU=Java, O=Oracle, C=US\f[R] +.RE +If a distinguished name string value contains a comma, then the comma +must be escaped by a backslash (\(rs) character when you specify the +string on a command line, as in: +.RS +.PP +\f[CR]cn=Jack, ou=Java\(rs, Product Development, o=Oracle, c=US\f[R] +.RE +It is never necessary to specify a distinguished name string on a +command line. +When the distinguished name is needed for a command, but not supplied on +the command line, the user is prompted for each of the subcomponents. +In this case, a comma doesn\(aqt need to be escaped by a backslash +(\(rs). +.RE +.SH WARNINGS +.SH IMPORTING TRUSTED CERTIFICATES WARNING +\f[B]Important\f[R]: Be sure to check a certificate very carefully +before importing it as a trusted certificate. +.PP +\f[B]Windows Example:\f[R] +.PP +View the certificate first with the \f[CR]\-printcert\f[R] command or +the \f[CR]\-importcert\f[R] command without the \f[CR]\-noprompt\f[R] +option. +Ensure that the displayed certificate fingerprints match the expected +ones. +For example, suppose someone sends or emails you a certificate that you +put it in a file named \f[CR]\(rstmp\(rscert\f[R]. +Before you consider adding the certificate to your list of trusted +certificates, you can execute a \f[CR]\-printcert\f[R] command to view +its fingerprints, as follows: +.IP +.EX + keytool \-printcert \-file \(rstmp\(rscert + Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Serial Number: 59092b34 + Valid from: Thu Jun 24 18:01:13 PDT 2016 until: Wed Jun 23 17:01:13 PST 2016 + Certificate Fingerprints: + + SHA\-1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE + SHA\-256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90: + 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4 +.EE +.PP +\f[B]Linux Example:\f[R] +.PP +View the certificate first with the \f[CR]\-printcert\f[R] command or +the \f[CR]\-importcert\f[R] command without the \f[CR]\-noprompt\f[R] +option. +Ensure that the displayed certificate fingerprints match the expected +ones. +For example, suppose someone sends or emails you a certificate that you +put it in a file named \f[CR]/tmp/cert\f[R]. +Before you consider adding the certificate to your list of trusted +certificates, you can execute a \f[CR]\-printcert\f[R] command to view +its fingerprints, as follows: +.IP +.EX + keytool \-printcert \-file /tmp/cert + Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll + Serial Number: 59092b34 + Valid from: Thu Jun 24 18:01:13 PDT 2016 until: Wed Jun 23 17:01:13 PST 2016 + Certificate Fingerprints: + + SHA\-1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE + SHA\-256: 90:7B:70:0A:EA:DC:16:79:92:99:41:FF:8A:FE:EB:90: + 17:75:E0:90:B2:24:4D:3A:2A:16:A6:E4:11:0F:67:A4 +.EE +.PP +Then call or otherwise contact the person who sent the certificate and +compare the fingerprints that you see with the ones that they show. +Only when the fingerprints are equal is it guaranteed that the +certificate wasn\(aqt replaced in transit with somebody else\(aqs +certificate such as an attacker\(aqs certificate. +If such an attack took place, and you didn\(aqt check the certificate +before you imported it, then you would be trusting anything the attacker +signed, for example, a JAR file with malicious class files inside. +.PP +\f[B]Note:\f[R] +.PP +It isn\(aqt required that you execute a \f[CR]\-printcert\f[R] command +before importing a certificate. +This is because before you add a certificate to the list of trusted +certificates in the keystore, the \f[CR]\-importcert\f[R] command prints +out the certificate information and prompts you to verify it. +You can then stop the import operation. +However, you can do this only when you call the \f[CR]\-importcert\f[R] +command without the \f[CR]\-noprompt\f[R] option. +If the \f[CR]\-noprompt\f[R] option is specified, then there is no +interaction with the user. +.SH PASSWORDS WARNING +Most commands that operate on a keystore require the store password. +Some commands require a private/secret key password. +Passwords can be specified on the command line in the +\f[CR]\-storepass\f[R] and \f[CR]\-keypass\f[R] options. +However, a password shouldn\(aqt be specified on a command line or in a +script unless it is for testing, or you are on a secure system. +When you don\(aqt specify a required password option on a command line, +you are prompted for it. +.SH CERTIFICATE CONFORMANCE WARNING +\f[B]Internet X.509 Public Key Infrastructure Certificate and +Certificate Revocation List (CRL) Profile\f[R] +[https://tools.ietf.org/rfc/rfc5280.txt] defined a profile on conforming +X.509 certificates, which includes what values and value combinations +are valid for certificate fields and extensions. +.PP +The \f[CR]keytool\f[R] command doesn\(aqt enforce all of these rules so +it can generate certificates that don\(aqt conform to the standard, such +as self\-signed certificates that would be used for internal testing +purposes. +Certificates that don\(aqt conform to the standard might be rejected by +the JDK or other applications. +Users should ensure that they provide the correct options for +\f[CR]\-dname\f[R], \f[CR]\-ext\f[R], and so on. +.SH IMPORT A NEW TRUSTED CERTIFICATE +Before you add the certificate to the keystore, the \f[CR]keytool\f[R] +command verifies it by attempting to construct a chain of trust from +that certificate to a self\-signed certificate (belonging to a root CA), +using trusted certificates that are already available in the keystore. +.PP +If the \f[CR]\-trustcacerts\f[R] option was specified, then additional +certificates are considered for the chain of trust, namely the +certificates in a file named \f[CR]cacerts\f[R]. +.PP +If the \f[CR]keytool\f[R] command fails to establish a trust path from +the certificate to be imported up to a self\-signed certificate (either +from the keystore or the \f[CR]cacerts\f[R] file), then the certificate +information is printed, and the user is prompted to verify it by +comparing the displayed certificate fingerprints with the fingerprints +obtained from some other (trusted) source of information, which might be +the certificate owner. +Be very careful to ensure the certificate is valid before importing it +as a trusted certificate. +The user then has the option of stopping the import operation. +If the \f[CR]\-noprompt\f[R] option is specified, then there is no +interaction with the user. +.SH IMPORT A CERTIFICATE REPLY +When you import a certificate reply, the certificate reply is validated +with trusted certificates from the keystore, and optionally, the +certificates configured in the \f[CR]cacerts\f[R] keystore file when the +\f[CR]\-trustcacerts\f[R] option is specified. +.PP +The methods of determining whether the certificate reply is trusted are +as follows: +.IP \(bu 2 +If the reply is a single X.509 certificate, then the \f[CR]keytool\f[R] +command attempts to establish a trust chain, starting at the certificate +reply and ending at a self\-signed certificate (belonging to a root CA). +The certificate reply and the hierarchy of certificates is used to +authenticate the certificate reply from the new certificate chain of +aliases. +If a trust chain can\(aqt be established, then the certificate reply +isn\(aqt imported. +In this case, the \f[CR]keytool\f[R] command doesn\(aqt print the +certificate and prompt the user to verify it, because it is very +difficult for a user to determine the authenticity of the certificate +reply. +.IP \(bu 2 +If the reply is a PKCS #7 formatted certificate chain or a sequence of +X.509 certificates, then the chain is ordered with the user certificate +first followed by zero or more CA certificates. +If the chain ends with a self\-signed root CA certificate and +the\f[CR]\-trustcacerts\f[R] option was specified, the +\f[CR]keytool\f[R] command attempts to match it with any of the trusted +certificates in the keystore or the \f[CR]cacerts\f[R] keystore file. +If the chain doesn\(aqt end with a self\-signed root CA certificate and +the \f[CR]\-trustcacerts\f[R] option was specified, the +\f[CR]keytool\f[R] command tries to find one from the trusted +certificates in the keystore or the \f[CR]cacerts\f[R] keystore file and +add it to the end of the chain. +If the certificate isn\(aqt found and the \f[CR]\-noprompt\f[R] option +isn\(aqt specified, the information of the last certificate in the chain +is printed, and the user is prompted to verify it. +.PP +If the public key in the certificate reply matches the user\(aqs public +key already stored with \f[CR]alias\f[R], then the old certificate chain +is replaced with the new certificate chain in the reply. +The old chain can only be replaced with a valid \f[CR]keypass\f[R], and +so the password used to protect the private key of the entry is +supplied. +If no password is provided, and the private key password is different +from the keystore password, the user is prompted for it. +.PP +This command was named \f[CR]\-import\f[R] in earlier releases. +This old name is still supported in this release. +The new name, \f[CR]\-importcert\f[R], is preferred. diff --git a/man/rmiregistry.1 b/man/rmiregistry.1 new file mode 100644 index 000000000..a8d2dde02 --- /dev/null +++ b/man/rmiregistry.1 @@ -0,0 +1,61 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "RMIREGISTRY" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +rmiregistry \- create and start a remote object registry on the +specified port on the current host +.SH SYNOPSIS +\f[CR]rmiregistry\f[R] [\f[I]options\f[R]] [\f[I]port\f[R]] +.TP +\f[I]options\f[R] +This represents the option for the \f[CR]rmiregistry\f[R] command. +See \f[B]Options\f[R] +.TP +\f[I]port\f[R] +The number of a port on the current host at which to start the remote +object registry. +.SH DESCRIPTION +The \f[CR]rmiregistry\f[R] command creates and starts a remote object +registry on the specified port on the current host. +If the port is omitted, then the registry is started on port 1099. +The \f[CR]rmiregistry\f[R] command produces no output and is typically +run in the background, for example: +.RS +.PP +\f[CR]rmiregistry &\f[R] +.RE +.PP +A remote object registry is a bootstrap naming service that\(aqs used by +RMI servers on the same host to bind remote objects to names. +Clients on local and remote hosts can then look up remote objects and +make remote method invocations. +.PP +The registry is typically used to locate the first remote object on +which an application needs to call methods. +That object then provides application\-specific support for finding +other objects. +.PP +The methods of the \f[CR]java.rmi.registry.LocateRegistry\f[R] class are +used to get a registry operating on the local host or local host and +port. +.PP +The URL\-based methods of the \f[CR]java.rmi.Naming\f[R] class operate +on a registry and can be used to: +.IP \(bu 2 +Bind the specified name to a remote object +.IP \(bu 2 +Return an array of the names bound in the registry +.IP \(bu 2 +Return a reference, a stub, for the remote object associated with the +specified name +.IP \(bu 2 +Rebind the specified name to a new remote object +.IP \(bu 2 +Destroy the binding for the specified name that\(aqs associated with a +remote object +.SH OPTIONS +.TP +\f[CR]\-J\f[R]\f[I]option\f[R] +Used with any Java option to pass the \f[I]option\f[R] following the +\f[CR]\-J\f[R] (no spaces between the \f[CR]\-J\f[R] and the option) to +the Java interpreter. diff --git a/man/serialver.1 b/man/serialver.1 new file mode 100644 index 000000000..8aaa89cf5 --- /dev/null +++ b/man/serialver.1 @@ -0,0 +1,37 @@ +.\" Automatically generated by Pandoc 3.10 +.\" +.TH "SERIALVER" "1" "2026" "JDK 25.0.4" "JDK Commands" +.SH NAME +serialver \- return the \f[CR]serialVersionUID\f[R] for one or more +classes in a form suitable for copying into an evolving class +.SH SYNOPSIS +\f[CR]serialver\f[R] [\f[I]options\f[R]] [\f[I]classnames\f[R]] +.TP +\f[I]options\f[R] +This represents the command\-line options for the \f[CR]serialver\f[R] +command. +See \f[B]Options for serialver\f[R]. +.TP +\f[I]classnames\f[R] +The classes for which \f[CR]serialVersionUID\f[R] is to be returned. +.SH DESCRIPTION +The \f[CR]serialver\f[R] command returns the \f[CR]serialVersionUID\f[R] +for one or more classes in a form suitable for copying into an evolving +class. +When called with no arguments, the \f[CR]serialver\f[R] command prints a +usage line. +.SH OPTIONS FOR SERIALVER +.TP +\f[CR]\-classpath\f[R] \f[I]path\-files\f[R] +Sets the search path for application classes and resources. +Separate classes and resources with a colon (:). +.TP +\f[CR]\-J\f[R]\f[I]option\f[R] +Passes the specified \f[I]option\f[R] to the Java Virtual Machine, where +\f[I]option\f[R] is one of the options described on the reference page +for the Java application launcher. +For example, \f[CR]\-J\-Xms48m\f[R] sets the startup memory to 48 MB. +.SH WARNING +The \f[CR]serialver\f[R] command loads and initializes the specified +classes in order to determine their \f[CR]serialVersionUID\f[R] values. +\f[I]DO NOT RUN\f[R] \f[CR]serialver\f[R] on untrusted classes. diff --git a/mauve_tests b/mauve_tests new file mode 100644 index 000000000..edba589aa --- /dev/null +++ b/mauve_tests @@ -0,0 +1,2570 @@ +javax.xml.xpath.XPath +javax.xml.parsers.DocumentBuilder.PR27864 +javax.xml.parsers.DocumentBuilder.parseSimpleXML +javax.crypto.spec.TestOfPBEKeySpec +javax.crypto.spec.TestOfSecretKeySpec +javax.accessibility.AccessibleContext.getAccessibleRelationSet +javax.imageio.plugins.jpeg.TestJPEGImageReadParam +javax.imageio.plugins.jpeg.TestJPEGHuffmanTable +javax.imageio.plugins.jpeg.TestJPEGQTable +javax.imageio.stream.IIOByteBuffer.setOffset +javax.imageio.stream.IIOByteBuffer.setLength +javax.imageio.stream.IIOByteBuffer.setData +javax.imageio.spi.ServiceRegistry.getServiceProviderByClass +javax.imageio.spi.ServiceRegistry.deregisterAll +javax.imageio.spi.ServiceRegistry.getCategories +javax.imageio.spi.ServiceRegistry.lookupProviders +javax.imageio.spi.ServiceRegistry.registerServiceProvider +javax.imageio.spi.IIOServiceProvider.getVersion +javax.imageio.spi.IIOServiceProvider.getVendorName +javax.imageio.spi.ImageOutputStreamSpi.ImageOutputStreamSpi +javax.imageio.spi.ImageOutputStreamSpi.needsCacheFile +javax.imageio.spi.ImageOutputStreamSpi.canUseCacheFile +javax.imageio.spi.ImageReaderWriterSpi.getNativeImageMetadataFormatName +javax.imageio.spi.ImageReaderWriterSpi.getFileSuffixes +javax.imageio.spi.ImageReaderWriterSpi.getExtraImageMetadataFormatNames +javax.imageio.spi.ImageReaderWriterSpi.getPluginClassName +javax.imageio.spi.ImageReaderWriterSpi.getNativeStreamMetadataFormatName +javax.imageio.spi.ImageReaderWriterSpi.getExtraStreamMetadataFormatNames +javax.imageio.spi.ImageReaderWriterSpi.getMIMETypes +javax.imageio.spi.ImageReaderWriterSpi.isStandardImageMetadataFormatSupported +javax.imageio.spi.ImageReaderWriterSpi.getFormatNames +javax.imageio.spi.ImageReaderWriterSpi.isStandardStreamMetadataFormatSupported +javax.imageio.spi.ImageInputStreamSpi.ImageInputStreamSpi +javax.imageio.spi.ImageInputStreamSpi.needsCacheFile +javax.imageio.spi.ImageInputStreamSpi.canUseCacheFile +javax.imageio.spi.ImageTranscoderSpi.ImageTranscoderSpi +javax.imageio.spi.IIORegistry.getDefaultInstance +javax.naming.CompoundName.simple +javax.naming.directory.BasicAttribute.Enumerate +javax.naming.CompositeName.composite +javax.management.ObjectName.apply +javax.management.ObjectName.Parsing +javax.management.ObjectName.ParsingJDK6 +javax.management.ObjectName.applyJDK6 +javax.management.openmbean.ArrayType.IsValue +javax.management.openmbean.ArrayType.Constructor2 +javax.management.openmbean.ArrayType.Equals +javax.management.openmbean.ArrayType.IsPrimitiveArray +javax.management.openmbean.ArrayType.GetArrayType +javax.management.openmbean.ArrayType.HashCode +javax.management.openmbean.ArrayType.GetPrimitiveArrayType +javax.management.openmbean.ArrayType.Constructor1 +javax.management.openmbean.CompositeDataInvocationHandler.Test +javax.management.MBeanServerPermission.Constructor +javax.security.auth.login.TestOfPR25202 +javax.print.SimpleDoc.constructor +javax.print.SimpleDoc.getStreamForBytes +javax.print.SimpleDoc.getAttributes +javax.print.SimpleDoc.getReaderForText +javax.print.DocFlavor.parseMimeType +javax.print.attribute.TextSyntax.constructors +javax.print.attribute.ResolutionSyntax.simple +javax.print.attribute.EnumSyntax.serialize +javax.print.attribute.EnumSyntax.equals +javax.print.attribute.AttributeSetUtilities.simple +javax.print.attribute.Size2DSyntax.simple +javax.print.attribute.SetOfIntegerSyntax.Simple +javax.print.attribute.HashAttributeSet.populatedSet +javax.print.attribute.HashAttributeSet.nullTests +javax.print.attribute.HashAttributeSet.emptySet +javax.print.attribute.standard.MediaSize.userClass +javax.swing.JWindow.isRootPaneCheckingEnabled +javax.swing.JSplitPane.setComponent +javax.swing.JSplitPane.setResizeWeight +javax.swing.JSplitPane.getDividerLocation +javax.swing.JSplitPane.getInputMap +javax.swing.JSplitPane.getActionMap +javax.swing.JSplitPane.paramString +javax.swing.JSplitPane.Constructor +javax.swing.JOptionPane.getInputMap +javax.swing.JTabbedPane.getInputMap +javax.swing.JTabbedPane.Mnemonic +javax.swing.JTabbedPane.remove +javax.swing.JToggleButton.constructor +javax.swing.JToggleButton.actionEvent +javax.swing.JToggleButton.isFocusable +javax.swing.JToggleButton.uidelegate +javax.swing.JToggleButton.getActionCommand +javax.swing.JToggleButton.model +javax.swing.JToggleButton.click +javax.swing.text.View.getResizeWeight +javax.swing.text.View.getMaximumSpan +javax.swing.text.View.getMinimumSpan +javax.swing.text.View.getAlignment +javax.swing.text.GapContent.getString +javax.swing.text.GapContent.GapContentTest +javax.swing.text.GapContent.length +javax.swing.text.GapContent.constructors +javax.swing.text.GapContent.insertString +javax.swing.text.GapContent.getChars +javax.swing.text.GapContent.PositionTest +javax.swing.text.GapContent.remove +javax.swing.text.ElementIterator.ElementIteratorTest +javax.swing.text.AbstractDocument.BranchElement.getStartOffset +javax.swing.text.AbstractDocument.BranchElement.getElementIndexNullPointer +javax.swing.text.AbstractDocument.BranchElement.BranchElementTest +javax.swing.text.AbstractDocument.BranchElement.getElementIndex +javax.swing.text.AbstractDocument.LeafElement.getStartOffset +javax.swing.text.AbstractDocument.getDocumentProperties +javax.swing.text.AbstractDocument.ElementChange2 +javax.swing.text.AbstractDocument.AbstractDocumentTest +javax.swing.text.AbstractDocument.ElementChange +javax.swing.text.AbstractDocument.filterTest +javax.swing.text.MaskFormatter.MaskFormatterTest +javax.swing.text.DefaultFormatter.getValueClass +javax.swing.text.PlainDocument.getRootElements +javax.swing.text.PlainDocument.getDocumentProperties +javax.swing.text.PlainDocument.removeJoinesLines +javax.swing.text.PlainDocument.multipleLeafs +javax.swing.text.PlainDocument.getText +javax.swing.text.PlainDocument.getLength +javax.swing.text.PlainDocument.createPosition +javax.swing.text.PlainDocument.insertUpdate +javax.swing.text.PlainDocument.insertString +javax.swing.text.PlainDocument.PlainDocumentTest +javax.swing.text.AttributeSet.isEqual +javax.swing.text.Segment.clone +javax.swing.text.Segment.first +javax.swing.text.Segment.setIndex +javax.swing.text.Segment.last +javax.swing.text.Segment.getIndex +javax.swing.text.Segment.current +javax.swing.text.Segment.next +javax.swing.text.Segment.isPartialReturn +javax.swing.text.Segment.getEndIndex +javax.swing.text.Segment.setPartialReturn +javax.swing.text.Segment.getBeginIndex +javax.swing.text.Segment.constructors +javax.swing.text.Segment.toString +javax.swing.text.Segment.previous +javax.swing.text.TextAction.augmentList +javax.swing.text.TabSet.getTab +javax.swing.text.TabSet.constructor +javax.swing.text.TabSet.getTabCount +javax.swing.text.TabSet.getTabIndex +javax.swing.text.TabSet.getTabIndexAfter +javax.swing.text.TabSet.equals +javax.swing.text.TabSet.toString +javax.swing.text.html.HTML.HTML_Test +javax.swing.text.html.HTMLDocument.FindById +javax.swing.text.html.parser.Entity.Entity_Test +javax.swing.text.html.parser.TagElement.TagElement_Test +javax.swing.text.html.parser.AttributeList.AttributeList_test +javax.swing.text.html.parser.Element.Element_Test +javax.swing.text.html.parser.ParserDelegator.Entities +javax.swing.text.html.parser.ParserDelegator.Text4 +javax.swing.text.html.parser.ParserDelegator.randomTables +javax.swing.text.html.parser.ParserDelegator.SimpleParsing +javax.swing.text.html.parser.ParserDelegator.Text3 +javax.swing.text.html.parser.ParserDelegator.Text +javax.swing.text.html.parser.ParserDelegator.eolnNorification +javax.swing.text.html.parser.ParserDelegator.tokenLocations +javax.swing.text.html.parser.DTD.DTD_test +javax.swing.text.BoxView.spans +javax.swing.text.StyleConstants.setTabSet +javax.swing.text.StyleConstants.setUnderline +javax.swing.text.StyleConstants.getLeftIndent +javax.swing.text.StyleConstants.getIcon +javax.swing.text.StyleConstants.setFontFamily +javax.swing.text.StyleConstants.isBold +javax.swing.text.StyleConstants.setLineSpacing +javax.swing.text.StyleConstants.isSubscript +javax.swing.text.StyleConstants.setItalic +javax.swing.text.StyleConstants.getFontSize +javax.swing.text.StyleConstants.setComponent +javax.swing.text.StyleConstants.setBidiLevel +javax.swing.text.StyleConstants.getForeground +javax.swing.text.StyleConstants.setSuperscript +javax.swing.text.StyleConstants.getSpaceAbove +javax.swing.text.StyleConstants.getLineSpacing +javax.swing.text.StyleConstants.setSpaceBelow +javax.swing.text.StyleConstants.setBackground +javax.swing.text.StyleConstants.getRightIndent +javax.swing.text.StyleConstants.getFirstLineIndent +javax.swing.text.StyleConstants.isItalic +javax.swing.text.StyleConstants.getTabSet +javax.swing.text.StyleConstants.setIcon +javax.swing.text.StyleConstants.isUnderline +javax.swing.text.StyleConstants.setBold +javax.swing.text.StyleConstants.setAlignment +javax.swing.text.StyleConstants.setSubscript +javax.swing.text.StyleConstants.setRightIndent +javax.swing.text.StyleConstants.isSuperscript +javax.swing.text.StyleConstants.getSpaceBelow +javax.swing.text.StyleConstants.setFontSize +javax.swing.text.StyleConstants.getFontFamily +javax.swing.text.StyleConstants.constants +javax.swing.text.StyleConstants.setStrikeThrough +javax.swing.text.StyleConstants.setForeground +javax.swing.text.StyleConstants.getAlignment +javax.swing.text.StyleConstants.setLeftIndent +javax.swing.text.StyleConstants.getBackground +javax.swing.text.StyleConstants.getComponent +javax.swing.text.StyleConstants.getBidiLevel +javax.swing.text.StyleConstants.setFirstLineIndent +javax.swing.text.StyleConstants.setSpaceAbove +javax.swing.text.StyleConstants.isStrikeThrough +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure3 +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure1 +javax.swing.text.DefaultStyledDocument.ElementBuffer.StyledDocument6 +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure7 +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure2 +javax.swing.text.DefaultStyledDocument.ElementBuffer.StyledDocument1 +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure4 +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure6 +javax.swing.text.DefaultStyledDocument.ElementBuffer.StyledDocument3 +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure5 +javax.swing.text.DefaultStyledDocument.ElementBuffer.insert +javax.swing.text.DefaultStyledDocument.ElementBuffer.ElementStructure8 +javax.swing.text.DefaultStyledDocument.ElementBuffer.StyledDocument2 +javax.swing.text.DefaultStyledDocument.ElementBuffer.StyledDocument5 +javax.swing.text.DefaultStyledDocument.ElementBuffer.StyledDocument4 +javax.swing.text.DefaultStyledDocument.Insert +javax.swing.text.DefaultStyledDocument.insertString +javax.swing.text.DefaultStyledDocument.Create +javax.swing.text.SimpleAttributeSet.removeAttributesOnlyIfMatch +javax.swing.text.SimpleAttributeSet.clone +javax.swing.text.SimpleAttributeSet.EMPTY +javax.swing.text.SimpleAttributeSet.containsAttributes +javax.swing.text.SimpleAttributeSet.containsChecksParent +javax.swing.text.SimpleAttributeSet.containsAttribute +javax.swing.text.SimpleAttributeSet.getResolveParent +javax.swing.text.SimpleAttributeSet.removeAttribute +javax.swing.text.SimpleAttributeSet.copyAttributes +javax.swing.text.SimpleAttributeSet.equals +javax.swing.text.SimpleAttributeSet.removeAttributes +javax.swing.text.SimpleAttributeSet.getAttribute +javax.swing.text.SimpleAttributeSet.isEqual +javax.swing.text.SimpleAttributeSet.getAttributeCount +javax.swing.text.SimpleAttributeSet.constructors +javax.swing.text.SimpleAttributeSet.isDefined +javax.swing.text.SimpleAttributeSet.addAttribute +javax.swing.text.SimpleAttributeSet.getAttributeNames +javax.swing.text.SimpleAttributeSet.setResolveParent +javax.swing.text.SimpleAttributeSet.isEmpty +javax.swing.text.SimpleAttributeSet.addAttributes +javax.swing.text.SimpleAttributeSet.nullValue +javax.swing.text.ZoneView.getMaximumZoneSize +javax.swing.text.ZoneView.createZone +javax.swing.text.ZoneView.constructor +javax.swing.text.ZoneView.zoneWasLoaded +javax.swing.text.ZoneView.isZoneLoaded +javax.swing.text.ZoneView.loadChildren +javax.swing.text.ZoneView.setMaxZonesLoaded +javax.swing.text.ZoneView.unloadZone +javax.swing.text.ZoneView.setMaximumZoneSize +javax.swing.text.FlowView.FlowStrategy.adjustRow +javax.swing.text.FlowView.getFlowAxis +javax.swing.text.InternationalFormatter.InternationalFormatterTest +javax.swing.text.Utilities.getNextWord +javax.swing.text.Utilities.getBreakLocation +javax.swing.text.Utilities.getPreviousWord +javax.swing.text.Utilities.getWordStart +javax.swing.text.Utilities.getTabbedTextOffset +javax.swing.text.TabStop.constructors +javax.swing.text.TabStop.toString +javax.swing.text.StringContent.insertUndo +javax.swing.text.StringContent.BadLocationExceptionTest +javax.swing.text.StringContent.stickyPosition +javax.swing.text.StringContent.length +javax.swing.text.StringContent.removeUndo +javax.swing.text.StringContent.constructors +javax.swing.text.StringContent.insertString +javax.swing.text.StringContent.StringContentTest +javax.swing.text.StyledEditorKit.createInputAttributesTest +javax.swing.text.StyleContext.NamedStyleInit +javax.swing.text.StyleContext.NamedStyleSetResolveParent +javax.swing.text.StyleContext.addStyle +javax.swing.text.StyleContext.addAttribute +javax.swing.JScrollBar.getAccessibleContext +javax.swing.JScrollBar.getInputMap +javax.swing.JScrollBar.constructors +javax.swing.JScrollBar.getActionMap +javax.swing.JScrollBar.paramString +javax.swing.plaf.basic.BasicButtonUI.getTextShiftOffset +javax.swing.plaf.basic.BasicButtonUI.getPropertyPrefix +javax.swing.plaf.basic.BasicButtonUI.defaultTextIconGap +javax.swing.plaf.basic.BasicButtonUI.setTextShiftOffset +javax.swing.plaf.basic.BasicButtonUI.defaultTextShiftOffset +javax.swing.plaf.basic.BasicButtonUI.clearTextShiftOffset +javax.swing.plaf.basic.BasicRadioButtonMenuItemUI.getPropertyPrefix +javax.swing.plaf.basic.BasicToggleButtonUI.getPropertyPrefix +javax.swing.plaf.basic.BasicSeparatorUI.getPreferredSize +javax.swing.plaf.basic.BasicSeparatorUI.getMinimumSize +javax.swing.plaf.basic.BasicSeparatorUI.getMaximumSize +javax.swing.plaf.basic.BasicLookAndFeel.initSystemColorDefaults +javax.swing.plaf.basic.BasicCheckBoxMenuItemUI.getPropertyPrefix +javax.swing.plaf.basic.BasicHTML.isHTMLString +javax.swing.plaf.basic.BasicScrollBarUI.layoutContainer +javax.swing.plaf.basic.BasicScrollBarUI.getPreferredSize +javax.swing.plaf.basic.BasicScrollBarUI.constructor +javax.swing.plaf.basic.BasicScrollBarUI.getMinimumSize +javax.swing.plaf.basic.BasicScrollBarUI.createDecreaseButton +javax.swing.plaf.basic.BasicScrollBarUI.getMaximumSize +javax.swing.plaf.basic.BasicScrollBarUI.getMaximumThumbSize +javax.swing.plaf.basic.BasicScrollBarUI.installDefaults +javax.swing.plaf.basic.BasicScrollBarUI.createIncreaseButton +javax.swing.plaf.basic.BasicScrollBarUI.installComponents +javax.swing.plaf.basic.BasicScrollBarUI.getMinimumThumbSize +javax.swing.plaf.basic.BasicInternalFrameTitlePane.MaximizeAction.constructor +javax.swing.plaf.basic.BasicInternalFrameTitlePane.IconifyAction.constructor +javax.swing.plaf.basic.BasicInternalFrameTitlePane.CloseAction.constructor +javax.swing.plaf.basic.BasicInternalFrameTitlePane.RestoreAction.constructor +javax.swing.plaf.basic.BasicInternalFrameTitlePane.MoveAction.constructor +javax.swing.plaf.basic.BasicInternalFrameTitlePane.SizeAction.constructor +javax.swing.plaf.basic.BasicPasswordFieldUI.getPropertyPrefix +javax.swing.plaf.basic.BasicSplitPaneUI.BasicHorizontalLayoutManager.layoutContainer +javax.swing.plaf.basic.BasicSplitPaneUI.getDividerLocation +javax.swing.plaf.basic.BasicArrowButton.getPreferredSize +javax.swing.plaf.basic.BasicArrowButton.isFocusTraversable +javax.swing.plaf.basic.BasicArrowButton.getMinimumSize +javax.swing.plaf.basic.BasicArrowButton.isFocusable +javax.swing.plaf.basic.BasicArrowButton.getMaximumSize +javax.swing.plaf.basic.BasicSliderUI.xPositionForValue +javax.swing.plaf.basic.BasicSliderUI.getPreferredSize +javax.swing.plaf.basic.BasicSliderUI.getMinimumSize +javax.swing.plaf.basic.BasicSliderUI.valueForYPosition +javax.swing.plaf.basic.BasicSliderUI.getMaximumSize +javax.swing.plaf.basic.BasicSliderUI.getThumbSize +javax.swing.plaf.basic.BasicSliderUI.valueForXPosition +javax.swing.plaf.basic.BasicSliderUI.constructors +javax.swing.plaf.basic.BasicSliderUI.yPositionForValue +javax.swing.plaf.basic.BasicTextFieldUI.getPropertyPrefix +javax.swing.plaf.basic.BasicTextPaneUI.getPropertyPrefix +javax.swing.plaf.basic.BasicMenuItemUI.getPropertyPrefix +javax.swing.plaf.basic.BasicFormattedTextFieldUI.getPropertyPrefix +javax.swing.plaf.basic.BasicTextAreaUI.getPropertyPrefix +javax.swing.plaf.basic.BasicComboBoxUI.getDefaultSize +javax.swing.plaf.basic.BasicComboBoxUI.createEditor +javax.swing.plaf.basic.BasicComboBoxUI.getMaximumSize +javax.swing.plaf.basic.BasicListUI.updateLayoutStateNeeded +javax.swing.plaf.basic.BasicMenuUI.getPropertyPrefix +javax.swing.plaf.basic.BasicIconFactory.getCheckBoxMenuItemIcon +javax.swing.plaf.basic.BasicIconFactory.getMenuArrowIcon +javax.swing.plaf.basic.BasicIconFactory.getCheckBoxIcon +javax.swing.plaf.basic.BasicFileChooserUI.getFileName +javax.swing.plaf.basic.BasicFileChooserUI.getApproveButtonText +javax.swing.plaf.basic.BasicFileChooserUI.constructor +javax.swing.plaf.basic.BasicFileChooserUI.getApproveButtonMnemonic +javax.swing.plaf.basic.BasicFileChooserUI.uninstallStrings +javax.swing.plaf.basic.BasicFileChooserUI.getApproveButton +javax.swing.plaf.basic.BasicFileChooserUI.getGoHomeAction +javax.swing.plaf.basic.BasicFileChooserUI.getUpdateAction +javax.swing.plaf.basic.BasicFileChooserUI.getDirectoryName +javax.swing.plaf.basic.BasicFileChooserUI.getApproveSelectionAction +javax.swing.plaf.basic.BasicFileChooserUI.installStrings +javax.swing.plaf.basic.BasicFileChooserUI.getChangeToParentDirectoryAction +javax.swing.plaf.basic.BasicFileChooserUI.getCancelSelectionAction +javax.swing.plaf.basic.BasicFileChooserUI.getFileView +javax.swing.plaf.basic.BasicFileChooserUI.installIcons +javax.swing.plaf.basic.BasicFileChooserUI.getNewFolderAction +javax.swing.plaf.basic.BasicFileChooserUI.getApproveButtonToolTipText +javax.swing.plaf.basic.BasicFileChooserUI.getDialogTitle +javax.swing.plaf.basic.BasicCheckBoxUI.getPropertyPrefix +javax.swing.plaf.basic.BasicComboBoxEditor.removeActionListener +javax.swing.plaf.basic.BasicComboBoxEditor.addActionListener +javax.swing.plaf.basic.BasicComboBoxEditor.constructor +javax.swing.plaf.basic.BasicEditorPaneUI.getPropertyPrefix +javax.swing.plaf.basic.BasicRootPaneUI.installDefaults +javax.swing.plaf.basic.BasicRadioButtonUI.getPropertyPrefix +javax.swing.plaf.ColorUIResource.serialization +javax.swing.plaf.ColorUIResource.equals +javax.swing.plaf.ColorUIResource.constructors +javax.swing.plaf.metal.MetalTheme.MetalThemeTest +javax.swing.plaf.metal.MetalLookAndFeel.getMenuTextFont +javax.swing.plaf.metal.MetalLookAndFeel.getDescription +javax.swing.plaf.metal.MetalLookAndFeel.isNativeLookAndFeel +javax.swing.plaf.metal.MetalLookAndFeel.getSeparatorBackground +javax.swing.plaf.metal.MetalLookAndFeel.getPrimaryControl +javax.swing.plaf.metal.MetalLookAndFeel.getWindowTitleInactiveForeground +javax.swing.plaf.metal.MetalLookAndFeel.getMenuBackground +javax.swing.plaf.metal.MetalLookAndFeel.getMenuForeground +javax.swing.plaf.metal.MetalLookAndFeel.getPrimaryControlShadow +javax.swing.plaf.metal.MetalLookAndFeel.getWindowTitleForeground +javax.swing.plaf.metal.MetalLookAndFeel.getControlTextFont +javax.swing.plaf.metal.MetalLookAndFeel.getControlHighlight +javax.swing.plaf.metal.MetalLookAndFeel.getPrimaryControlHighlight +javax.swing.plaf.metal.MetalLookAndFeel.getControlTextColor +javax.swing.plaf.metal.MetalLookAndFeel.getPrimaryControlDarkShadow +javax.swing.plaf.metal.MetalLookAndFeel.getSeparatorForeground +javax.swing.plaf.metal.MetalLookAndFeel.getSubTextFont +javax.swing.plaf.metal.MetalLookAndFeel.setCurrentTheme +javax.swing.plaf.metal.MetalLookAndFeel.getControlShadow +javax.swing.plaf.metal.MetalLookAndFeel.isSupportedLookAndFeel +javax.swing.plaf.metal.MetalLookAndFeel.getMenuSelectedBackground +javax.swing.plaf.metal.MetalLookAndFeel.getInactiveControlTextColor +javax.swing.plaf.metal.MetalLookAndFeel.getWhite +javax.swing.plaf.metal.MetalLookAndFeel.getUserTextFont +javax.swing.plaf.metal.MetalLookAndFeel.getAcceleratorForeground +javax.swing.plaf.metal.MetalLookAndFeel.getControlDisabled +javax.swing.plaf.metal.MetalLookAndFeel.getID +javax.swing.plaf.metal.MetalLookAndFeel.getWindowTitleBackground +javax.swing.plaf.metal.MetalLookAndFeel.getName +javax.swing.plaf.metal.MetalLookAndFeel.getSystemTextColor +javax.swing.plaf.metal.MetalLookAndFeel.getWindowTitleFont +javax.swing.plaf.metal.MetalLookAndFeel.getInactiveSystemTextColor +javax.swing.plaf.metal.MetalLookAndFeel.getUserTextColor +javax.swing.plaf.metal.MetalLookAndFeel.getWindowBackground +javax.swing.plaf.metal.MetalLookAndFeel.getBlack +javax.swing.plaf.metal.MetalLookAndFeel.getAcceleratorSelectedForeground +javax.swing.plaf.metal.MetalLookAndFeel.getDesktopColor +javax.swing.plaf.metal.MetalLookAndFeel.getSystemTextFont +javax.swing.plaf.metal.MetalLookAndFeel.getControlDarkShadow +javax.swing.plaf.metal.MetalLookAndFeel.getControlInfo +javax.swing.plaf.metal.MetalLookAndFeel.getMenuDisabledForeground +javax.swing.plaf.metal.MetalLookAndFeel.getFocusColor +javax.swing.plaf.metal.MetalLookAndFeel.getMenuSelectedForeground +javax.swing.plaf.metal.MetalLookAndFeel.getHighlightedTextColor +javax.swing.plaf.metal.MetalLookAndFeel.getControl +javax.swing.plaf.metal.MetalLookAndFeel.getWindowTitleInactiveBackground +javax.swing.plaf.metal.MetalLookAndFeel.getTextHighlightColor +javax.swing.plaf.metal.MetalLookAndFeel.getPrimaryControlInfo +javax.swing.plaf.metal.MetalComboBoxIcon.getIconWidth +javax.swing.plaf.metal.MetalComboBoxIcon.getIconHeight +javax.swing.plaf.metal.MetalComboBoxUI.getPreferredSize +javax.swing.plaf.metal.MetalComboBoxUI.createArrowButton +javax.swing.plaf.metal.MetalFileChooserUI.getFileName +javax.swing.plaf.metal.MetalFileChooserUI.createFilterComboBoxModel +javax.swing.plaf.metal.MetalFileChooserUI.getButtonPanel +javax.swing.plaf.metal.MetalFileChooserUI.getPreferredSize +javax.swing.plaf.metal.MetalFileChooserUI.getMinimumSize +javax.swing.plaf.metal.MetalFileChooserUI.getMaximumSize +javax.swing.plaf.metal.MetalFileChooserUI.getApproveButton +javax.swing.plaf.metal.MetalFileChooserUI.setFileName +javax.swing.plaf.metal.MetalFileChooserUI.getBottomPanel +javax.swing.plaf.metal.MetalCheckBoxUI.getPropertyPrefix +javax.swing.plaf.metal.MetalIconFactory.TreeFolderIcon.getAdditionalHeight +javax.swing.plaf.metal.MetalIconFactory.TreeFolderIcon.getShift +javax.swing.plaf.metal.MetalIconFactory.PaletteCloseIcon.getIconWidth +javax.swing.plaf.metal.MetalIconFactory.PaletteCloseIcon.getIconHeight +javax.swing.plaf.metal.MetalIconFactory.TreeLeafIcon.getAdditionalHeight +javax.swing.plaf.metal.MetalIconFactory.TreeLeafIcon.getShift +javax.swing.plaf.metal.MetalIconFactory.getInternalFrameCloseIcon +javax.swing.plaf.metal.MetalIconFactory.getInternalFrameMaximizeIcon +javax.swing.plaf.metal.MetalIconFactory.getMenuItemCheckIcon +javax.swing.plaf.metal.MetalIconFactory.getRadioButtonMenuItemIcon +javax.swing.plaf.metal.MetalIconFactory.getCheckBoxMenuItemIcon +javax.swing.plaf.metal.MetalIconFactory.getTreeHardDriveIcon +javax.swing.plaf.metal.MetalIconFactory.getTreeLeafIcon +javax.swing.plaf.metal.MetalIconFactory.getMenuArrowIcon +javax.swing.plaf.metal.MetalIconFactory.getFileChooserNewFolderIcon +javax.swing.plaf.metal.MetalIconFactory.getTreeControlIcon +javax.swing.plaf.metal.MetalIconFactory.getFileChooserDetailViewIcon +javax.swing.plaf.metal.MetalIconFactory.getTreeFloppyDriveIcon +javax.swing.plaf.metal.MetalIconFactory.getMenuItemArrowIcon +javax.swing.plaf.metal.MetalIconFactory.getFileChooserListViewIcon +javax.swing.plaf.metal.MetalIconFactory.getTreeComputerIcon +javax.swing.plaf.metal.MetalIconFactory.getFileChooserHomeFolderIcon +javax.swing.plaf.metal.MetalIconFactory.getInternalFrameAltMaximizeIcon +javax.swing.plaf.metal.MetalIconFactory.getRadioButtonIcon +javax.swing.plaf.metal.MetalIconFactory.getFileChooserUpFolderIcon +javax.swing.plaf.metal.MetalIconFactory.getInternalFrameDefaultMenuIcon +javax.swing.plaf.metal.MetalIconFactory.getInternalFrameMinimizeIcon +javax.swing.plaf.metal.MetalIconFactory.getCheckBoxIcon +javax.swing.plaf.metal.MetalIconFactory.getTreeFolderIcon +javax.swing.plaf.metal.MetalRadioButtonUI.getSelectColor +javax.swing.plaf.metal.MetalRadioButtonUI.getFocusColor +javax.swing.plaf.metal.MetalRadioButtonUI.getDisabledTextColor +javax.swing.plaf.metal.MetalComboBoxButton.setIconOnly +javax.swing.plaf.metal.MetalComboBoxButton.isFocusTraversable +javax.swing.plaf.metal.MetalComboBoxButton.setEnabled +javax.swing.plaf.metal.MetalComboBoxButton.isIconOnly +javax.swing.plaf.metal.MetalComboBoxButton.getComboBox +javax.swing.plaf.metal.MetalComboBoxButton.getComboIcon +javax.swing.plaf.metal.MetalComboBoxButton.setComboBox +javax.swing.plaf.metal.MetalComboBoxButton.constructors +javax.swing.plaf.metal.MetalComboBoxButton.setComboIcon +javax.swing.plaf.metal.DefaultMetalTheme.getMenuTextFont +javax.swing.plaf.metal.DefaultMetalTheme.DefaultMetalThemeTest +javax.swing.plaf.metal.DefaultMetalTheme.getControlTextFont +javax.swing.plaf.metal.DefaultMetalTheme.getSubTextFont +javax.swing.plaf.metal.DefaultMetalTheme.getUserTextFont +javax.swing.plaf.metal.DefaultMetalTheme.getName +javax.swing.plaf.metal.DefaultMetalTheme.getWindowTitleFont +javax.swing.plaf.metal.DefaultMetalTheme.getSystemTextFont +javax.swing.plaf.metal.MetalComboBoxEditor.constructor +javax.swing.plaf.metal.MetalComboBoxEditor.editorBorderInsets +javax.swing.plaf.metal.MetalToolTipUI.constructor +javax.swing.plaf.metal.MetalToolTipUI.createUI +javax.swing.plaf.metal.OceanTheme.OceanThemeTest +javax.swing.plaf.metal.OceanTheme.addCustomEntriesToTable +javax.swing.plaf.metal.MetalToggleButtonUI.getSelectColor +javax.swing.plaf.metal.MetalToggleButtonUI.getFocusColor +javax.swing.plaf.metal.MetalToggleButtonUI.getDisabledTextColor +javax.swing.plaf.metal.MetalBorders.ToolBarBorder.getBorderInsets +javax.swing.plaf.metal.MetalBorders.MenuItemBorder.borderInsets +javax.swing.plaf.metal.MetalBorders.MenuBarBorder.getBorderInsets +javax.swing.plaf.metal.MetalBorders.MenuBarBorder.borderInsets +javax.swing.plaf.metal.MetalBorders.getToggleButtonBorder +javax.swing.plaf.metal.MetalBorders.getDesktopIconBorder +javax.swing.plaf.metal.MetalBorders.getButtonBorder +javax.swing.plaf.metal.MetalBorders.getTextFieldBorder +javax.swing.plaf.metal.MetalBorders.getTextBorder +javax.swing.plaf.metal.MetalScrollButton.getButtonWidth +javax.swing.plaf.metal.MetalScrollButton.getPreferredSize +javax.swing.plaf.metal.MetalScrollButton.constructor +javax.swing.plaf.metal.MetalScrollButton.getMinimumSize +javax.swing.plaf.metal.MetalScrollButton.isFocusable +javax.swing.plaf.metal.MetalScrollButton.getMaximumSize +javax.swing.plaf.metal.MetalScrollBarUI.layoutContainer +javax.swing.plaf.metal.MetalScrollBarUI.getPreferredSize +javax.swing.plaf.metal.MetalScrollBarUI.constructor +javax.swing.plaf.metal.MetalScrollBarUI.installDefaults +javax.swing.plaf.metal.MetalScrollBarUI.getMinimumThumbSize +javax.swing.plaf.metal.MetalButtonUI.getSelectColor +javax.swing.plaf.metal.MetalButtonUI.getFocusColor +javax.swing.plaf.metal.MetalButtonUI.getDisabledTextColor +javax.swing.plaf.IconUIResource.constructor +javax.swing.JFrame.isRootPaneCheckingEnabled +javax.swing.JFrame.glassPaneLayout +javax.swing.JFrame.constructors +javax.swing.border.TitledBorder.getTitleFont +javax.swing.border.TitledBorder.getTitle +javax.swing.border.TitledBorder.setTitleJustification +javax.swing.border.TitledBorder.getBorder +javax.swing.border.TitledBorder.getBorderInsets +javax.swing.border.TitledBorder.setTitleColor +javax.swing.border.TitledBorder.setTitle +javax.swing.border.TitledBorder.setTitlePosition +javax.swing.border.TitledBorder.getTitleJustification +javax.swing.border.TitledBorder.setBorder +javax.swing.border.TitledBorder.getTitleColor +javax.swing.border.TitledBorder.isBorderOpaque +javax.swing.border.TitledBorder.constructors +javax.swing.border.TitledBorder.setTitleFont +javax.swing.border.TitledBorder.getTitlePosition +javax.swing.border.CompoundBorder.isBorderOpaque +javax.swing.JTable.AccessibleJTable.AccessibleJTableHeaderCell.getAccessibleRole +javax.swing.JTable.AccessibleJTable.AccessibleJTableCell.getAccessibleRole +javax.swing.JTable.AccessibleJTable.getAccessibleColumnHeader +javax.swing.JTable.setRowSelectionAllowed +javax.swing.JTable.getColumn +javax.swing.JTable.getRowHeight +javax.swing.JTable.convertColumnIndexToModel +javax.swing.JTable.createDefaultDataModel +javax.swing.JTable.getCellEditor +javax.swing.JTable.setColumnSelectionAllowed +javax.swing.JTable.setAutoCreateColumnsFromModel +javax.swing.JTable.setRowHeight +javax.swing.JTable.createDefaultSelectionModel +javax.swing.JTable.getAccessibleContext +javax.swing.JTable.convertColumnIndexToView +javax.swing.JTable.isCellEditable +javax.swing.JTable.getInputMap +javax.swing.JTable.getCellRect +javax.swing.JTable.isRowSelected +javax.swing.JTable.getModel +javax.swing.JTable.initializeLocalVars +javax.swing.JTable.createDefaultColumnsFromModel +javax.swing.JTable.getAutoCreateColumnsFromModel +javax.swing.JTable.isColumnSelected +javax.swing.JTable.addColumn +javax.swing.table.AbstractTableModel.getColumnName +javax.swing.table.AbstractTableModel.fireTableDataChanged +javax.swing.table.AbstractTableModel.fireTableStructureChanged +javax.swing.table.AbstractTableModel.fireTableRowsUpdated +javax.swing.table.AbstractTableModel.fireTableRowsDeleted +javax.swing.table.AbstractTableModel.getColumnClass +javax.swing.table.AbstractTableModel.isCellEditable +javax.swing.table.AbstractTableModel.fireTableChanged +javax.swing.table.AbstractTableModel.findColumn +javax.swing.table.AbstractTableModel.fireTableRowsInserted +javax.swing.table.AbstractTableModel.fireTableCellUpdated +javax.swing.table.DefaultTableCellRenderer.getTableCellRendererComponent +javax.swing.table.DefaultTableColumnModel.getListeners +javax.swing.table.DefaultTableColumnModel.getColumn +javax.swing.table.DefaultTableColumnModel.getColumnModelListeners +javax.swing.table.DefaultTableColumnModel.getSelectedColumnCount +javax.swing.table.DefaultTableColumnModel.getSelectionModel +javax.swing.table.DefaultTableColumnModel.getTotalColumnWidth +javax.swing.table.DefaultTableColumnModel.constructor +javax.swing.table.DefaultTableColumnModel.getColumns +javax.swing.table.DefaultTableColumnModel.setColumnSelectionAllowed +javax.swing.table.DefaultTableColumnModel.getColumnSelectionAllowed +javax.swing.table.DefaultTableColumnModel.getColumnCount +javax.swing.table.DefaultTableColumnModel.setSelectionModel +javax.swing.table.DefaultTableColumnModel.setColumnMargin +javax.swing.table.DefaultTableColumnModel.getColumnIndexAtX +javax.swing.table.DefaultTableColumnModel.addColumnModelListener +javax.swing.table.DefaultTableColumnModel.removeColumn +javax.swing.table.DefaultTableColumnModel.moveColumn +javax.swing.table.DefaultTableColumnModel.addColumn +javax.swing.table.DefaultTableColumnModel.getColumnIndex +javax.swing.table.DefaultTableColumnModel.getColumnMargin +javax.swing.table.DefaultTableModel.removeRow +javax.swing.table.DefaultTableModel.getRowCount +javax.swing.table.DefaultTableModel.setColumnCount +javax.swing.table.DefaultTableModel.insertRow +javax.swing.table.DefaultTableModel.getColumnCount +javax.swing.table.DefaultTableModel.convertToVector +javax.swing.table.DefaultTableModel.setColumnIdentifiers +javax.swing.table.DefaultTableModel.isCellEditable +javax.swing.table.DefaultTableModel.setDataVector +javax.swing.table.DefaultTableModel.setValueAt +javax.swing.table.DefaultTableModel.moveRow +javax.swing.table.DefaultTableModel.newDataAvailable +javax.swing.table.DefaultTableModel.addRow +javax.swing.table.DefaultTableModel.constructors +javax.swing.table.DefaultTableModel.getDataVector +javax.swing.table.DefaultTableModel.rowsRemoved +javax.swing.table.DefaultTableModel.addColumn +javax.swing.table.DefaultTableModel.setRowCount +javax.swing.table.DefaultTableModel.getValueAt +javax.swing.table.TableColumn.setCellEditor +javax.swing.table.TableColumn.getHeaderRenderer +javax.swing.table.TableColumn.getIdentifier +javax.swing.table.TableColumn.setPreferredWidth +javax.swing.table.TableColumn.setHeaderValue +javax.swing.table.TableColumn.getCellRenderer +javax.swing.table.TableColumn.sizeWidthToFit +javax.swing.table.TableColumn.setResizable +javax.swing.table.TableColumn.properties +javax.swing.table.TableColumn.removePropertyChangeListener +javax.swing.table.TableColumn.setIdentifier +javax.swing.table.TableColumn.addPropertyChangeListener +javax.swing.table.TableColumn.setMinWidth +javax.swing.table.TableColumn.setModelIndex +javax.swing.table.TableColumn.setCellRenderer +javax.swing.table.TableColumn.getModelIndex +javax.swing.table.TableColumn.setMaxWidth +javax.swing.table.TableColumn.setWidth +javax.swing.table.TableColumn.constants +javax.swing.table.TableColumn.setHeaderRenderer +javax.swing.table.TableColumn.getHeaderValue +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getLocale +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.isFocusTraversable +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.setAccessibleName +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleName +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleDescription +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleIndexInParent +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleContext +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.isVisible +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleChild +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleRole +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleComponent +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleChildrenCount +javax.swing.table.JTableHeader.AccessibleJTableHeader.AccessibleJTableHeaderEntry.getAccessibleValue +javax.swing.table.JTableHeader.AccessibleJTableHeader.getAccessibleChild +javax.swing.table.JTableHeader.AccessibleJTableHeader.getAccessibleRole +javax.swing.table.JTableHeader.AccessibleJTableHeader.getAccessibleChildrenCount +javax.swing.table.JTableHeader.getAccessibleContext +javax.swing.event.InternalFrameEvent.constructor +javax.swing.event.InternalFrameEvent.getInternalFrame +javax.swing.event.InternalFrameEvent.paramString +javax.swing.event.ListDataEvent.getIndex0 +javax.swing.event.ListDataEvent.constructor +javax.swing.event.ListDataEvent.getType +javax.swing.event.ListDataEvent.getSource +javax.swing.event.ListDataEvent.getIndex1 +javax.swing.event.ListDataEvent.toString +javax.swing.event.TableModelEvent.constructors +javax.swing.event.SwingPropertyChangeSupport.firePropertyChange +javax.swing.event.SwingPropertyChangeSupport.getPropertyChangeListeners +javax.swing.event.SwingPropertyChangeSupport.constructor +javax.swing.event.SwingPropertyChangeSupport.hasListeners +javax.swing.event.SwingPropertyChangeSupport.removePropertyChangeListener +javax.swing.event.SwingPropertyChangeSupport.addPropertyChangeListener +javax.swing.event.EventListenerList.getListeners +javax.swing.event.EventListenerList.add +javax.swing.event.EventListenerList.getListenerList +javax.swing.event.EventListenerList.getListenerCount +javax.swing.event.EventListenerList.toString +javax.swing.event.EventListenerList.remove +javax.swing.event.TreeSelectionEvent.isAddedPath +javax.swing.event.TreeSelectionEvent.cloneWithSource +javax.swing.event.TreeSelectionEvent.constructors +javax.swing.JDesktopPane.constructor +javax.swing.JRadioButton.isFocusable +javax.swing.JRadioButton.uidelegate +javax.swing.JRadioButton.getActionCommand +javax.swing.JRadioButton.model +javax.swing.JMenuBar.getComponentIndex +javax.swing.JMenuBar.getHelpMenu +javax.swing.JMenuBar.getSubElements +javax.swing.JMenuBar.setMargin +javax.swing.JMenuBar.getInputMap +javax.swing.JMenuBar.setHelpMenu +javax.swing.JMenuBar.getActionMap +javax.swing.JMenuBar.getMenu +javax.swing.JCheckBoxMenuItem.uidelegate +javax.swing.JCheckBoxMenuItem.getActionCommand +javax.swing.JCheckBoxMenuItem.model +javax.swing.JCheckBoxMenuItem.constructors +javax.swing.JComboBox.getPrototypeDisplayValue +javax.swing.JComboBox.MutableTest2 +javax.swing.JComboBox.setEditor +javax.swing.JComboBox.getEditor +javax.swing.JComboBox.addItem +javax.swing.JComboBox.MutableTest1 +javax.swing.JComboBox.removeItem +javax.swing.JComboBox.setModel +javax.swing.JComboBox.setSelectedIndex +javax.swing.JComboBox.model +javax.swing.JComboBox.listenerList +javax.swing.JComboBox.setPrototypeDisplayValue +javax.swing.JComboBox.setEditable +javax.swing.JComboBox.SimpleSelectionTest +javax.swing.OverlayLayout.layoutContainer +javax.swing.OverlayLayout.getLayoutAlignmentY +javax.swing.OverlayLayout.getLayoutAlignmentX +javax.swing.OverlayLayout.preferredLayoutSize +javax.swing.OverlayLayout.minimumLayoutSize +javax.swing.OverlayLayout.maximumLayoutSize +javax.swing.JScrollPane.AccessibleJScrollPane.resetViewport +javax.swing.JScrollPane.createHorizontalScrollBar +javax.swing.JScrollPane.getInputMap +javax.swing.JScrollPane.createVerticalScrollBar +javax.swing.JScrollPane.getActionMap +javax.swing.DefaultListCellRenderer.getListCellRendererComponent +javax.swing.JFileChooser.setFileHidingEnabled +javax.swing.JFileChooser.getControlButtonsAreShown +javax.swing.JFileChooser.setApproveButtonMnemonic +javax.swing.JFileChooser.setFileSystemView +javax.swing.JFileChooser.getApproveButtonText +javax.swing.JFileChooser.setDialogTitle +javax.swing.JFileChooser.setDialogType +javax.swing.JFileChooser.setSelectedFile +javax.swing.JFileChooser.getChoosableFileFilters +javax.swing.JFileChooser.getApproveButtonMnemonic +javax.swing.JFileChooser.setApproveButtonText +javax.swing.JFileChooser.getDialogType +javax.swing.JFileChooser.getFileFilter +javax.swing.JFileChooser.setAccessory +javax.swing.JFileChooser.isAcceptAllFileFilterUsed +javax.swing.JFileChooser.accept +javax.swing.JFileChooser.setControlButtonsAreShown +javax.swing.JFileChooser.setFileView +javax.swing.JFileChooser.setCurrentDirectory +javax.swing.JFileChooser.isFileHidingEnabled +javax.swing.JFileChooser.constructors +javax.swing.JFileChooser.changeToParentDirectory +javax.swing.JFileChooser.getFileView +javax.swing.JFileChooser.getFileSystemView +javax.swing.JFileChooser.setSelectedFiles +javax.swing.JFileChooser.setFileFilter +javax.swing.JFileChooser.getFileSelectionMode +javax.swing.JFileChooser.setFileSelectionMode +javax.swing.JFileChooser.getSelectedFiles +javax.swing.JFileChooser.getAccessory +javax.swing.JFileChooser.setApproveButtonToolTipText +javax.swing.JFileChooser.getApproveButtonToolTipText +javax.swing.JFileChooser.getDialogTitle +javax.swing.SpinnerDateModel.getPreviousValue +javax.swing.SpinnerDateModel.setStart +javax.swing.SpinnerDateModel.setEnd +javax.swing.SpinnerDateModel.setValue +javax.swing.SpinnerDateModel.getNextValue +javax.swing.SpinnerDateModel.constructors +javax.swing.JDialog.isRootPaneCheckingEnabled +javax.swing.JPopupMenu.getInputMap +javax.swing.JSlider.getPaintTrack +javax.swing.JSlider.addChangeListener +javax.swing.JSlider.setMinimum +javax.swing.JSlider.setSnapToTicks +javax.swing.JSlider.setOrientation +javax.swing.JSlider.getMinorTickSpacing +javax.swing.JSlider.setValue +javax.swing.JSlider.setMaximum +javax.swing.JSlider.setExtent +javax.swing.JSlider.setPaintLabels +javax.swing.JSlider.getSnapToTicks +javax.swing.JSlider.setMinorTickSpacing +javax.swing.JSlider.getUIClassID +javax.swing.JSlider.setLabelTable +javax.swing.JSlider.getPaintTicks +javax.swing.JSlider.setModel +javax.swing.JSlider.getMaximum +javax.swing.JSlider.setPaintTicks +javax.swing.JSlider.getPaintLabels +javax.swing.JSlider.getMinimum +javax.swing.JSlider.getModel +javax.swing.JSlider.getInverted +javax.swing.JSlider.setInverted +javax.swing.JSlider.constructors +javax.swing.JSlider.getMajorTickSpacing +javax.swing.JSlider.createStandardLabels +javax.swing.JSlider.setMajorTickSpacing +javax.swing.JSlider.getExtent +javax.swing.JSlider.setPaintTrack +javax.swing.JSlider.getLabelTable +javax.swing.DefaultButtonModel.addActionListener +javax.swing.DefaultButtonModel.setPressed +javax.swing.DefaultButtonModel.setEnabled +javax.swing.DefaultButtonModel.constructor +javax.swing.DefaultButtonModel.setActionCommand +javax.swing.DefaultButtonModel.getSelectedObjects +javax.swing.DefaultButtonModel.setArmed +javax.swing.DefaultButtonModel.setSelected +javax.swing.DefaultButtonModel.constants +javax.swing.DefaultButtonModel.setRollover +javax.swing.DefaultButtonModel.setGroup +javax.swing.JComponent.getListeners +javax.swing.JComponent.setVerifyInputWhenFocusTarget +javax.swing.JComponent.getVetoableChangeListeners +javax.swing.JComponent.setInheritsPopupMenu +javax.swing.JComponent.getPreferredSize +javax.swing.JComponent.setEnabled +javax.swing.JComponent.constructor +javax.swing.JComponent.registerKeyboardAction +javax.swing.JComponent.setUI +javax.swing.JComponent.getActionForKeyStroke +javax.swing.JComponent.setMinimumSize +javax.swing.JComponent.setPreferredSize +javax.swing.JComponent.setDefaultLocale +javax.swing.JComponent.setBackground +javax.swing.JComponent.setBorder +javax.swing.JComponent.getInputMap +javax.swing.JComponent.setVisible +javax.swing.JComponent.setAlignmentX +javax.swing.JComponent.setComponentPopupMenu +javax.swing.JComponent.getFont +javax.swing.JComponent.setAlignmentY +javax.swing.JComponent.setMaximumSize +javax.swing.JComponent.setFont +javax.swing.JComponent.getVerifyInputWhenFocusTarget +javax.swing.JComponent.putClientProperty +javax.swing.JComponent.getAlignmentY +javax.swing.JComponent.getComponentPopupMenu +javax.swing.JComponent.getAlignmentX +javax.swing.JComponent.removeVetoableChangeListener +javax.swing.JComponent.getRegisteredKeyStrokes +javax.swing.JComponent.setForeground +javax.swing.JComponent.paint +javax.swing.JComponent.setOpaque +javax.swing.JComponent.addVetoableChangeListener +javax.swing.JProgressBar.isStringPainted +javax.swing.JProgressBar.setOrientation +javax.swing.JProgressBar.setValue +javax.swing.JProgressBar.setBorderPainted +javax.swing.JProgressBar.setStringPainted +javax.swing.JProgressBar.getAccessibleContext +javax.swing.JProgressBar.getPercentComplete +javax.swing.JProgressBar.paramString +javax.swing.JMenu.uidelegate +javax.swing.JMenu.getInputMap +javax.swing.JMenu.getActionCommand +javax.swing.JMenu.model +javax.swing.JMenu.getPopUpMenu +javax.swing.JMenu.remove +javax.swing.UIManager.LookAndFeelInfo.constructor +javax.swing.UIManager.getPropertyChangeListeners +javax.swing.UIManager.getBoolean +javax.swing.UIManager.addAuxiliaryLookAndFeel +javax.swing.UIManager.getString +javax.swing.UIManager.getBorder +javax.swing.UIManager.getIcon +javax.swing.UIManager.getInsets +javax.swing.UIManager.removeAuxiliaryLookAndFeel +javax.swing.UIManager.setLookAndFeel +javax.swing.UIManager.getFont +javax.swing.UIManager.getDefaults +javax.swing.UIManager.getInt +javax.swing.UIManager.addPropertyChangeListener +javax.swing.UIManager.getUI +javax.swing.UIManager.getDimension +javax.swing.UIManager.getLookAndFeelDefaults +javax.swing.UIManager.getCrossPlatformLookAndFeelClassName +javax.swing.UIManager.getColor +javax.swing.UIManager.getAuxiliaryLookAndFeels +javax.swing.JPanel.setBorder +javax.swing.JPanel.Layouter +javax.swing.JTree.getCellRenderer +javax.swing.JTree.isRowSelected +javax.swing.JTree.setModel +javax.swing.TransferHandler.exportToClipboard +javax.swing.TransferHandler.TransferActionConstructor +javax.swing.TransferHandler.canImport +javax.swing.TransferHandler.importData +javax.swing.TransferHandler.createTransferable +javax.swing.JToolTip.setComponent +javax.swing.JToolTip.setTipText +javax.swing.JToolTip.getAccessibleContext +javax.swing.JToolTip.getUIClassID +javax.swing.JToolTip.getTipText +javax.swing.JToolTip.paramString +javax.swing.JToolTip.getComponent +javax.swing.JToolBar.buttonInsets +javax.swing.JToolBar.getInputMap +javax.swing.JRootPane.RootLayout.layoutContainer +javax.swing.JRootPane.RootLayout.getLayoutAlignmentY +javax.swing.JRootPane.RootLayout.getLayoutAlignmentX +javax.swing.JRootPane.RootLayout.preferredLayoutSize +javax.swing.JRootPane.setLayeredPane +javax.swing.ScrollPaneLayout.minimumLayoutSize +javax.swing.Timer.preparatory +javax.swing.Timer.setDelay +javax.swing.Timer.basic +javax.swing.Timer.test_23918 +javax.swing.Timer.setInitialDelay +javax.swing.ActionMap.newMapKeysNull +javax.swing.InputMap.put +javax.swing.InputMap.constructor +javax.swing.InputMap.keys +javax.swing.InputMap.setParent +javax.swing.InputMap.size +javax.swing.InputMap.newMapKeysNull +javax.swing.InputMap.get +javax.swing.InputMap.getParent +javax.swing.InputMap.remove +javax.swing.InputMap.clear +javax.swing.InputMap.allKeys +javax.swing.filechooser.FileView.getDescription +javax.swing.filechooser.FileView.getIcon +javax.swing.filechooser.FileView.getName +javax.swing.filechooser.FileView.isTraversable +javax.swing.filechooser.FileView.getTypeDescription +javax.swing.filechooser.FileSystemView.getFileSystemView +javax.swing.ViewportLayout.layoutContainer +javax.swing.ViewportLayout.minimumLayoutSize +javax.swing.JList.AccessibleJList.AccessibleJListChild.isFocusTraversable +javax.swing.JList.AccessibleJList.AccessibleJListChild.isEnabled +javax.swing.JList.AccessibleJList.AccessibleJListChild.setEnabled +javax.swing.JList.AccessibleJList.AccessibleJListChild.setCursor +javax.swing.JList.AccessibleJList.AccessibleJListChild.getForeground +javax.swing.JList.AccessibleJList.AccessibleJListChild.setBackground +javax.swing.JList.AccessibleJList.AccessibleJListChild.isVisible +javax.swing.JList.AccessibleJList.AccessibleJListChild.isShowing +javax.swing.JList.AccessibleJList.AccessibleJListChild.getFont +javax.swing.JList.AccessibleJList.AccessibleJListChild.getCursor +javax.swing.JList.AccessibleJList.AccessibleJListChild.getAccessibleRole +javax.swing.JList.AccessibleJList.AccessibleJListChild.setFont +javax.swing.JList.AccessibleJList.AccessibleJListChild.getAccessibleStateSet +javax.swing.JList.AccessibleJList.AccessibleJListChild.setForeground +javax.swing.JList.AccessibleJList.AccessibleJListChild.getBackground +javax.swing.JList.AccessibleJList.valueChanged +javax.swing.JList.AccessibleJList.getAccessibleChild +javax.swing.JList.AccessibleJList.getAccessibleRole +javax.swing.JList.AccessibleJList.intervalAdded +javax.swing.JList.AccessibleJList.intervalRemoved +javax.swing.JList.AccessibleJList.contentsChanged +javax.swing.JList.AccessibleJList.getAccessibleStateSet +javax.swing.JList.setValueIsAdjusting +javax.swing.JList.setVisibleRowCount +javax.swing.JList.setSelectionBackground +javax.swing.JList.setBackground +javax.swing.JList.getSelectionBackground +javax.swing.JList.getInputMap +javax.swing.JList.setModel +javax.swing.JList.getNextMatch +javax.swing.JList.setLayoutOrientation +javax.swing.JList.constructors +javax.swing.JList.getBackground +javax.swing.ToolTipManager.setReshowDelay +javax.swing.ToolTipManager.setInitialDelay +javax.swing.ToolTipManager.setDismissDelay +javax.swing.AbstractButton.constructor +javax.swing.AbstractButton.setRolloverEnabled +javax.swing.AbstractButton.setRolloverSelectedIcon +javax.swing.AbstractButton.init +javax.swing.AbstractButton.setVerticalTextPosition +javax.swing.AbstractButton.setHorizontalAlignment +javax.swing.AbstractButton.setHorizontalTextPosition +javax.swing.AbstractButton.setRolloverIcon +javax.swing.AbstractButton.setVerticalAlignment +javax.swing.AbstractButton.createChangeListener +javax.swing.JLayeredPane.defaultLayoutManager +javax.swing.JLayeredPane.getComponentsInLayer +javax.swing.JLayeredPane.setPosition +javax.swing.JLayeredPane.moveToFront +javax.swing.JLayeredPane.addImpl +javax.swing.DefaultListModel.toArray +javax.swing.DefaultListModel.trimToSize +javax.swing.DefaultListModel.removeAllElements +javax.swing.DefaultListModel.constructor +javax.swing.DefaultListModel.add +javax.swing.DefaultListModel.lastElement +javax.swing.DefaultListModel.copyInto +javax.swing.DefaultListModel.firstElement +javax.swing.DefaultListModel.setElementAt +javax.swing.DefaultListModel.set +javax.swing.DefaultListModel.elementAt +javax.swing.DefaultListModel.ensureCapacity +javax.swing.DefaultListModel.indexOf +javax.swing.DefaultListModel.insertElementAt +javax.swing.DefaultListModel.setSize +javax.swing.DefaultListModel.lastIndexOf +javax.swing.DefaultListModel.elements +javax.swing.DefaultListModel.size +javax.swing.DefaultListModel.getSize +javax.swing.DefaultListModel.capacity +javax.swing.DefaultListModel.removeElementAt +javax.swing.DefaultListModel.get +javax.swing.DefaultListModel.contains +javax.swing.DefaultListModel.getElementAt +javax.swing.DefaultListModel.removeRange +javax.swing.DefaultListModel.addElement +javax.swing.DefaultListModel.removeElement +javax.swing.DefaultListModel.isEmpty +javax.swing.DefaultListModel.remove +javax.swing.DefaultListModel.clear +javax.swing.JFormattedTextField.JFormattedTextFieldTests +javax.swing.AbstractAction.clone +javax.swing.AbstractAction.setEnabled +javax.swing.AbstractAction.getValue +javax.swing.AbstractAction.constructors +javax.swing.AbstractAction.putValue +javax.swing.JTextArea.preferredSize +javax.swing.JTextArea.isValidChecks +javax.swing.JTextArea.text +javax.swing.JTextArea.gettingText +javax.swing.JCheckBox.constructor +javax.swing.JCheckBox.isFocusable +javax.swing.JCheckBox.uidelegate +javax.swing.JCheckBox.getActionCommand +javax.swing.JCheckBox.model +javax.swing.JButton.uidelegate +javax.swing.JButton.getActionCommand +javax.swing.JButton.model +javax.swing.SizeRequirements.calculateAlignedPositions +javax.swing.tree.TreePath.getParentPath +javax.swing.tree.TreePath.serialization +javax.swing.tree.TreePath.getPath +javax.swing.tree.TreePath.getLastPathComponent +javax.swing.tree.TreePath.PR27651 +javax.swing.tree.TreePath.isDescendant +javax.swing.tree.TreePath.equals +javax.swing.tree.TreePath.getPathCount +javax.swing.tree.TreePath.constructors +javax.swing.tree.TreePath.getPathComponent +javax.swing.tree.TreePath.pathByAddingChild +javax.swing.tree.DefaultMutableTreeNode.clone +javax.swing.tree.DefaultMutableTreeNode.getChildAt +javax.swing.tree.DefaultMutableTreeNode.getChildBefore +javax.swing.tree.DefaultMutableTreeNode.getSiblingCount +javax.swing.tree.DefaultMutableTreeNode.isNodeSibling +javax.swing.tree.DefaultMutableTreeNode.getIndex +javax.swing.tree.DefaultMutableTreeNode.isNodeChild +javax.swing.tree.DefaultMutableTreeNode.add +javax.swing.tree.DefaultMutableTreeNode.getFirstChild +javax.swing.tree.DefaultMutableTreeNode.getPath +javax.swing.tree.DefaultMutableTreeNode.removeAllChildren +javax.swing.tree.DefaultMutableTreeNode.getChildCount +javax.swing.tree.DefaultMutableTreeNode.isNodeRelated +javax.swing.tree.DefaultMutableTreeNode.getNextSibling +javax.swing.tree.DefaultMutableTreeNode.getPreviousSibling +javax.swing.tree.DefaultMutableTreeNode.setAllowsChildren +javax.swing.tree.DefaultMutableTreeNode.getPreviousLeaf +javax.swing.tree.DefaultMutableTreeNode.isNodeAncestor +javax.swing.tree.DefaultMutableTreeNode.getNextPreviousNode +javax.swing.tree.DefaultMutableTreeNode.isNodeDescendant +javax.swing.tree.DefaultMutableTreeNode.breadthFirstEnumeration +javax.swing.tree.DefaultMutableTreeNode.getLastLeaf +javax.swing.tree.DefaultMutableTreeNode.children +javax.swing.tree.DefaultMutableTreeNode.getAllowsChildren +javax.swing.tree.DefaultMutableTreeNode.getFirstLeaf +javax.swing.tree.DefaultMutableTreeNode.constructors +javax.swing.tree.DefaultMutableTreeNode.isLeaf +javax.swing.tree.DefaultMutableTreeNode.insert +javax.swing.tree.DefaultMutableTreeNode.DefaultMutableTreeNodeTest +javax.swing.tree.DefaultMutableTreeNode.getParent +javax.swing.tree.DefaultMutableTreeNode.getLastChild +javax.swing.tree.DefaultMutableTreeNode.pathFromAncestorEnumeration +javax.swing.tree.DefaultMutableTreeNode.remove +javax.swing.tree.DefaultMutableTreeNode.getNextLeaf +javax.swing.tree.DefaultMutableTreeNode.getChildAfter +javax.swing.tree.DefaultTreeCellRenderer.getBackgroundSelectionColor +javax.swing.tree.DefaultTreeCellRenderer.getOpenIcon +javax.swing.tree.DefaultTreeCellRenderer.getClosedIcon +javax.swing.tree.DefaultTreeCellRenderer.setOpenIcon +javax.swing.tree.DefaultTreeCellRenderer.constructor +javax.swing.tree.DefaultTreeCellRenderer.getLeafIcon +javax.swing.tree.DefaultTreeCellRenderer.getBorderSelectionColor +javax.swing.tree.DefaultTreeCellRenderer.setLeafIcon +javax.swing.tree.DefaultTreeCellRenderer.getDefaultLeafIcon +javax.swing.tree.DefaultTreeCellRenderer.setBackgroundSelectionColor +javax.swing.tree.DefaultTreeCellRenderer.getDefaultOpenIcon +javax.swing.tree.DefaultTreeCellRenderer.getDefaultClosedIcon +javax.swing.tree.DefaultTreeCellRenderer.setBackgroundNonSelectionColor +javax.swing.tree.DefaultTreeCellRenderer.setBorderSelectionColor +javax.swing.tree.DefaultTreeCellRenderer.getBackgroundNonSelectionColor +javax.swing.tree.DefaultTreeCellRenderer.setClosedIcon +javax.swing.tree.VariableHeightLayoutCache.getBounds +javax.swing.BoxLayout.layoutContainer +javax.swing.BoxLayout.invalidateLayout +javax.swing.BoxLayout.constructor +javax.swing.BoxLayout.simplevertical +javax.swing.BoxLayout.maximumLayoutSize2 +javax.swing.BoxLayout.getLayoutAlignmentY +javax.swing.BoxLayout.horizontal2 +javax.swing.BoxLayout.getLayoutAlignmentX +javax.swing.BoxLayout.simplehorizontal +javax.swing.BoxLayout.constants +javax.swing.BoxLayout.preferredLayoutSize +javax.swing.BoxLayout.minimumLayoutSize +javax.swing.BoxLayout.maximumLayoutSize +javax.swing.JApplet.isRootPaneCheckingEnabled +javax.swing.DefaultBoundedRangeModel.setValueIsAdjusting +javax.swing.DefaultBoundedRangeModel.setMinimum +javax.swing.DefaultBoundedRangeModel.serialization +javax.swing.DefaultBoundedRangeModel.setValue +javax.swing.DefaultBoundedRangeModel.setMaximum +javax.swing.DefaultBoundedRangeModel.setExtent +javax.swing.DefaultBoundedRangeModel.getChangeListeners +javax.swing.DefaultBoundedRangeModel.getValue +javax.swing.DefaultBoundedRangeModel.setRangeProperties +javax.swing.DefaultBoundedRangeModel.getMaximum +javax.swing.DefaultBoundedRangeModel.getValueIsAdjusting +javax.swing.DefaultBoundedRangeModel.getMinimum +javax.swing.DefaultBoundedRangeModel.general +javax.swing.DefaultBoundedRangeModel.toString +javax.swing.DefaultBoundedRangeModel.getExtent +javax.swing.undo.UndoableEditSupport.getUndoableEditListeners +javax.swing.undo.UndoableEditSupport.createCompoundEdit +javax.swing.undo.UndoableEditSupport.toString +javax.swing.undo.UndoableEditSupport.beginUpdate +javax.swing.undo.UndoableEditSupport.UndoableEditSupport +javax.swing.undo.UndoableEditSupport.getUpdateLevel +javax.swing.undo.CompoundEdit.lastEdit +javax.swing.undo.CompoundEdit.addEdit +javax.swing.undo.CompoundEdit.canRedo +javax.swing.undo.CompoundEdit.canUndo +javax.swing.undo.CompoundEdit.isInProgress +javax.swing.undo.AbstractUndoableEdit.getRedoPresentationName +javax.swing.undo.AbstractUndoableEdit.addEdit +javax.swing.undo.AbstractUndoableEdit.canRedo +javax.swing.undo.AbstractUndoableEdit.redo +javax.swing.undo.AbstractUndoableEdit.undo +javax.swing.undo.AbstractUndoableEdit.canUndo +javax.swing.undo.AbstractUndoableEdit.getPresentationName +javax.swing.undo.AbstractUndoableEdit.replaceEdit +javax.swing.undo.AbstractUndoableEdit.isSignificant +javax.swing.undo.AbstractUndoableEdit.getUndoPresentationName +javax.swing.undo.StateEdit.undo +javax.swing.undo.StateEdit.getPresentationName +javax.swing.undo.UndoManager.getRedoPresentationName +javax.swing.undo.UndoManager.getUndoOrRedoPresentationName +javax.swing.undo.UndoManager.addEdit +javax.swing.undo.UndoManager.canRedo +javax.swing.undo.UndoManager.trimEdits +javax.swing.undo.UndoManager.undoTo +javax.swing.undo.UndoManager.editToBeUndone +javax.swing.undo.UndoManager.canUndo +javax.swing.undo.UndoManager.undoableEditHappened +javax.swing.undo.UndoManager.setLimit +javax.swing.undo.UndoManager.discardAllEdits +javax.swing.undo.UndoManager.redoTo +javax.swing.undo.UndoManager.end +javax.swing.undo.UndoManager.toString +javax.swing.undo.UndoManager.getUndoPresentationName +javax.swing.undo.UndoManager.getLimit +javax.swing.undo.UndoManager.editToBeRedone +javax.swing.undo.UndoManager.canUndoOrRedo +javax.swing.JMenuItem.getActionCommand +javax.swing.JMenuItem.constructors +javax.swing.DefaultComboBoxModel.removeAllElements +javax.swing.DefaultComboBoxModel.insertElementAt +javax.swing.DefaultComboBoxModel.getIndexOf +javax.swing.DefaultComboBoxModel.getSize +javax.swing.DefaultComboBoxModel.constructors +javax.swing.DefaultComboBoxModel.removeElementAt +javax.swing.DefaultComboBoxModel.getSelectedItem +javax.swing.DefaultComboBoxModel.getElementAt +javax.swing.DefaultComboBoxModel.addElement +javax.swing.DefaultComboBoxModel.removeElement +javax.swing.SizeSequence.getIndex +javax.swing.SizeSequence.getSizes +javax.swing.SizeSequence.removeEntries +javax.swing.SizeSequence.setSizes +javax.swing.SizeSequence.setSize +javax.swing.SizeSequence.getSize +javax.swing.SizeSequence.constructors +javax.swing.SizeSequence.insertEntries +javax.swing.JTextField.CopyPaste +javax.swing.JTextField.createDefaultModel +javax.swing.JTextField.setDocument +javax.swing.JTextField.fireActionPerformed +javax.swing.UIDefaults.putDefaults +javax.swing.UIDefaults.getBoolean +javax.swing.UIDefaults.remove +javax.swing.RepaintManager.addDirtyRegion +javax.swing.JInternalFrame.AccessibleJInternalFrame.getAccessibleName +javax.swing.JInternalFrame.AccessibleJInternalFrame.getCurrentAccessibleValue +javax.swing.JInternalFrame.AccessibleJInternalFrame.getMaximumAccessibleValue +javax.swing.JInternalFrame.AccessibleJInternalFrame.setCurrentAccessibleValue +javax.swing.JInternalFrame.AccessibleJInternalFrame.getAccessibleRole +javax.swing.JInternalFrame.AccessibleJInternalFrame.getAccessibleValue +javax.swing.JInternalFrame.AccessibleJInternalFrame.getMinimumAccessibleValue +javax.swing.JInternalFrame.getDesktopIcon +javax.swing.JInternalFrame.isRootPaneCheckingEnabled +javax.swing.JInternalFrame.setDefaultCloseOperation +javax.swing.JInternalFrame.isIconifiable +javax.swing.JInternalFrame.setTitle +javax.swing.JInternalFrame.setClosable +javax.swing.JInternalFrame.setResizable +javax.swing.JInternalFrame.setIconifiable +javax.swing.JInternalFrame.setFrameIcon +javax.swing.JInternalFrame.setMaximizable +javax.swing.JInternalFrame.getInputMap +javax.swing.JInternalFrame.setClosed +javax.swing.JInternalFrame.setNormalBounds +javax.swing.JInternalFrame.setSelected2 +javax.swing.JInternalFrame.dispose +javax.swing.JInternalFrame.isResizable +javax.swing.JInternalFrame.constructors +javax.swing.JInternalFrame.paramString +javax.swing.JInternalFrame.setDesktopIcon +javax.swing.JInternalFrame.getNormalBounds +javax.swing.SpinnerListModel.Constructors +javax.swing.SpinnerListModel.Ordering +javax.swing.SpinnerListModel.SetList +javax.swing.SpinnerListModel.ArrayModel +javax.swing.SpinnerListModel.ListModel +javax.swing.JRadioButtonMenuItem.isFocusable +javax.swing.JRadioButtonMenuItem.uidelegate +javax.swing.JRadioButtonMenuItem.getActionCommand +javax.swing.JRadioButtonMenuItem.model +javax.swing.KeyStroke.getKeyStroke +javax.swing.SpinnerNumberModel.getPreviousValue +javax.swing.SpinnerNumberModel.setMinimum +javax.swing.SpinnerNumberModel.setValue +javax.swing.SpinnerNumberModel.setMaximum +javax.swing.SpinnerNumberModel.getNextValue +javax.swing.SpinnerNumberModel.setStepSize +javax.swing.SpinnerNumberModel.constructors +javax.swing.JLabel.AccessibleJLabel.getAccessibleName +javax.swing.JLabel.setDisplayedMnemonicIndex +javax.swing.JLabel.constructor +javax.swing.JLabel.getAccessibleContext +javax.swing.JLabel.Icon +javax.swing.JLabel.getInputMap +javax.swing.JLabel.setHorizontalAlignment +javax.swing.JLabel.setFont +javax.swing.JLabel.setDisplayedMnemonic +javax.swing.JLabel.getActionMap +javax.swing.JLabel.Mnemonic +javax.swing.JLabel.paramString +javax.swing.JLabel.setVerticalAlignment +javax.swing.JEditorPane.ContentType +javax.swing.JEditorPane.ViewType +javax.swing.JEditorPane.setText +javax.swing.JEditorPane.getScrollableTracks +javax.swing.DefaultListSelectionModel.clone +javax.swing.DefaultListSelectionModel.getListeners +javax.swing.DefaultListSelectionModel.setValueIsAdjusting +javax.swing.DefaultListSelectionModel.setAnchorSelectionIndex +javax.swing.DefaultListSelectionModel.removeListSelectionListener +javax.swing.DefaultListSelectionModel.constructor +javax.swing.DefaultListSelectionModel.removeIndexInterval +javax.swing.DefaultListSelectionModel.removeSelectionInterval +javax.swing.DefaultListSelectionModel.getAnchorSelectionIndex +javax.swing.DefaultListSelectionModel.getLeadSelectionIndex +javax.swing.DefaultListSelectionModel.isLeadAnchorNotificationEnabled +javax.swing.DefaultListSelectionModel.setSelectionInterval +javax.swing.DefaultListSelectionModel.getSelectionMode +javax.swing.DefaultListSelectionModel.isSelectedIndex +javax.swing.DefaultListSelectionModel.moveLeadSelectionIndex +javax.swing.DefaultListSelectionModel.leadSelectionIndex +javax.swing.DefaultListSelectionModel.getMaxSelectionIndex +javax.swing.DefaultListSelectionModel.getMinSelectionIndex +javax.swing.DefaultListSelectionModel.getListSelectionListeners +javax.swing.DefaultListSelectionModel.getValueIsAdjusting +javax.swing.DefaultListSelectionModel.isSelectionEmpty +javax.swing.DefaultListSelectionModel.addSelectionInterval +javax.swing.DefaultListSelectionModel.setLeadSelectionIndex +javax.swing.DefaultListSelectionModel.toString +javax.swing.DefaultListSelectionModel.setSelectionMode +javax.swing.DefaultListSelectionModel.clearSelection +javax.swing.DefaultListSelectionModel.insertIndexInterval +javax.swing.DefaultListSelectionModel.addListSelectionListener +javax.swing.SwingUtilities.calculateInnerArea +javax.swing.SwingUtilities.isRectangleContainingRectangle +javax.swing.SwingUtilities.computeIntersection +javax.swing.SwingUtilities.replaceUIActionMap +javax.swing.SwingUtilities.computeUnion +javax.swing.JSpinner.ListEditor.constructor +javax.swing.JSpinner.ListEditor.getModel +javax.swing.JSpinner.NumberEditor.getModel +javax.swing.JSpinner.NumberEditor.constructors +javax.swing.JSpinner.NumberEditor.getFormat +javax.swing.JSpinner.DefaultEditor.constructor +javax.swing.JSpinner.DefaultEditor.stateChanged +javax.swing.JSpinner.DefaultEditor.propertyChange +javax.swing.JSpinner.DefaultEditor.preferredLayoutSize +javax.swing.JSpinner.DefaultEditor.minimumLayoutSize +javax.swing.JSpinner.DateEditor.getModel +javax.swing.JSpinner.getPreviousValue +javax.swing.JSpinner.addChangeListener +javax.swing.JSpinner.createEditor +javax.swing.JSpinner.getChangeListeners +javax.swing.JSpinner.setEditor +javax.swing.JSpinner.getUIClassID +javax.swing.JSpinner.getEditor +javax.swing.JSpinner.setModel +javax.swing.JSpinner.getNextValue +javax.swing.JSpinner.getModel +javax.swing.JSpinner.constructors +javax.swing.JSpinner.removeChangeListener +javax.swing.ButtonGroup.constructor +javax.swing.ButtonGroup.add +javax.swing.ButtonGroup.isSelected +javax.swing.ButtonGroup.getSelection +javax.swing.ButtonGroup.getElements +javax.swing.ButtonGroup.getButtonCount +javax.swing.ButtonGroup.setSelected +javax.swing.ButtonGroup.remove +javax.swing.JViewport.setView +gnu.javax.crypto.jce.TestOfDHKeyAgreement2 +gnu.javax.crypto.jce.TestOfPR27849 +gnu.javax.crypto.jce.TestOfPR27228 +java.rmi.server.Uniqueness +java.lang.Integer.compareTo +java.lang.Integer.decode +java.lang.Integer.new_Integer +java.lang.Integer.IntegerTest +java.lang.Integer.getInteger +java.lang.Integer.parseInt +java.lang.ClassLoader.redefine +java.lang.ClassLoader.security +java.lang.ClassLoader.loadClass +java.lang.ClassLoader.initialize +java.lang.ClassLoader.Resources +java.lang.ClassLoader.BootDefinedPackages +java.lang.Number.NumberTest +java.lang.ProcessBuilder.simple +java.lang.System.getProperty +java.lang.System.arraycopy +java.lang.System.identityHashCode +java.lang.ThreadGroup.enumerate +java.lang.ThreadGroup.insecurity +java.lang.ThreadGroup.security +java.lang.String.substring +java.lang.String.compareTo +java.lang.String.getBytes13 +java.lang.String.hash +java.lang.String.split +java.lang.String.getBytes14 +java.lang.String.startsWith +java.lang.String.equals +java.lang.String.indexOf +java.lang.String.to +java.lang.String.StringTest +java.lang.String.surrogate +java.lang.String.charAt +java.lang.String.new_String +java.lang.String.getBytes +java.lang.String.CASE_INSENSITIVE_ORDER +java.lang.Class.ClassTest +java.lang.Class.serialization +java.lang.Class.reflect +java.lang.Class.security +java.lang.Class.init +java.lang.Class.newInstance +java.lang.Class.reflect2 +java.lang.Cloneable.CloneableTest +java.lang.ref.WeakReference.weakref +java.lang.ref.PhantomReference.phantom +java.lang.Double.compareTo +java.lang.Double.DoubleSetterTest +java.lang.Double.DoubleTest +java.lang.Double.toHexString +java.lang.Double.parseDouble +java.lang.Double.compare +java.lang.Double.valueOf +java.lang.StrictMath.cbrt +java.lang.StrictMath.expm1 +java.lang.StrictMath.cosh +java.lang.StrictMath.sinh +java.lang.StrictMath.tanh +java.lang.Short.hash +java.lang.Short.ShortTest +java.lang.InheritableThreadLocal.simple +java.lang.Math.max +java.lang.Math.ulp +java.lang.Math.sin +java.lang.Math.min +java.lang.Math.cos +java.lang.Math.MathTest +java.lang.Math.rint +java.lang.Boolean.BooleanTest +java.lang.Boolean.equals_Boolean +java.lang.Boolean.new_Boolean +java.lang.Boolean.hashcode_Boolean +java.lang.Boolean.get +java.lang.Boolean.value +java.lang.Float.compareTo +java.lang.Float.toHexString +java.lang.Float.compare +java.lang.Float.parseFloat +java.lang.Float.valueOf +java.lang.Float.FloatTest +java.lang.Float.new_Float +java.lang.reflect.Array.set +java.lang.reflect.Array.newInstance +java.lang.reflect.AccessibleObject.accessible +java.lang.reflect.Field.promotion +java.lang.reflect.Field.access +java.lang.reflect.Field.toString +java.lang.reflect.Modifier.toString12 +java.lang.reflect.Modifier.toString +java.lang.reflect.Constructor.newInstance +java.lang.reflect.Constructor.toString +java.lang.reflect.Proxy.DeclaringClass +java.lang.reflect.Proxy.check13 +java.lang.reflect.Proxy.ExceptionRaising +java.lang.reflect.Proxy.ToString +java.lang.reflect.InvocationTargetException.Chain +java.lang.reflect.Method.equals +java.lang.reflect.Method.toString +java.lang.reflect.Method.invoke +java.lang.reflect.ReflectAccess +java.lang.ThreadLocal.simple +java.lang.Object.clone +java.lang.Object.wait +java.lang.Object.ObjectTest +java.lang.Object.oom +java.lang.Byte.ByteTest +java.lang.Byte.new_Byte +java.lang.StringBuffer.StringBufferTest +java.lang.StringBuffer.plus +java.lang.Long.Tests15 +java.lang.Long.getLong +java.lang.Long.LongTest +java.lang.Long.new_Long +java.lang.Thread.join +java.lang.Thread.isAlive +java.lang.Thread.name +java.lang.Thread.interrupt +java.lang.Thread.contextClassLoader +java.lang.Thread.getThreadGroup +java.lang.Thread.priority +java.lang.Thread.stop +java.lang.Thread.daemon +java.lang.Package.getPackage +java.lang.Character.digit +java.lang.Character.Blocks +java.lang.Character.unicode +java.lang.Character.getNumericValue +java.lang.Character.getType +java.lang.Character.hash +java.lang.Character.classify +java.lang.Character.classify12 +java.lang.Character.to +java.lang.Character.consts +java.lang.Character.forDigit +java.lang.Character.getType12 +java.lang.Character.equals_Character +java.lang.Character.CharacterTest +java.lang.Character.Blocks15 +java.lang.SecurityManager.thread +java.text.StringCharacterIterator.constructor +java.text.StringCharacterIterator.iter +java.text.CollationElementIterator.offset +java.text.CollationElementIterator.jdk11 +java.text.AttributedString.constructors +java.text.AttributedString.addAttribute +java.text.AttributedString.getIterator +java.text.AttributedString.addAttributes +java.text.AttributedString.Test +java.text.DecimalFormat.setCurrency +java.text.DecimalFormat.clone +java.text.DecimalFormat.setDecimalFormatSymbols +java.text.DecimalFormat.getNegativePrefix +java.text.DecimalFormat.applyPattern +java.text.DecimalFormat.formatToCharacterIterator +java.text.DecimalFormat.getNegativeSuffix +java.text.DecimalFormat.setNegativePrefix +java.text.DecimalFormat.applyLocalizedPattern +java.text.DecimalFormat.getDecimalFormatSymbols +java.text.DecimalFormat.toLocalizedPattern +java.text.DecimalFormat.isDecimalSeparatorAlwaysShown +java.text.DecimalFormat.setNegativeSuffix +java.text.DecimalFormat.PR27311 +java.text.DecimalFormat.getPositivePrefix +java.text.DecimalFormat.getCurrency +java.text.DecimalFormat.equals +java.text.DecimalFormat.digits +java.text.DecimalFormat.setDecimalSeparatorAlwaysShown +java.text.DecimalFormat.setPositiveSuffix +java.text.DecimalFormat.parse +java.text.DecimalFormat.setPositivePrefix +java.text.DecimalFormat.toPattern14 +java.text.DecimalFormat.setMultiplier +java.text.DecimalFormat.format +java.text.DecimalFormat.getPositiveSuffix +java.text.DecimalFormat.setGroupingSize +java.text.DecimalFormat.PR23996 +java.text.DecimalFormat.toPattern +java.text.DecimalFormat.constructors +java.text.DecimalFormat.MaximumAndMinimumDigits +java.text.DecimalFormat.formatExp +java.text.DecimalFormat.getGroupingSize +java.text.DecimalFormat.hashCode +java.text.DecimalFormat.position +java.text.DecimalFormat.getMultiplier +java.text.NumberFormat.UK +java.text.CharacterIterator.implement +java.text.ParsePosition.Test +java.text.BreakIterator.chariter +java.text.BreakIterator.patho +java.text.BreakIterator.lineiter +java.text.BreakIterator.sentiter +java.text.BreakIterator.worditer +java.text.Collator.Constants +java.text.Collator.GetSet +java.text.ParseException.Test +java.text.Annotation.Test +java.text.RuleBasedCollator.CollatorTests +java.text.RuleBasedCollator.VeryBasic +java.text.MessageFormat.format14 +java.text.MessageFormat.attribute +java.text.MessageFormat.parse +java.text.MessageFormat.format +java.text.ChoiceFormat.next +java.text.ChoiceFormat.parse +java.text.ChoiceFormat.format +java.text.DateFormatSymbols.setMonths +java.text.DateFormatSymbols.setShortMonths +java.text.DateFormatSymbols.setEras +java.text.DateFormatSymbols.setAmPmStrings +java.text.DateFormatSymbols.setWeekdays +java.text.DateFormatSymbols.setZoneStrings +java.text.DateFormatSymbols.setShortWeekdays +java.text.DateFormatSymbols.Test +java.text.AttributedCharacterIterator.Attribute.toString +java.text.AttributedCharacterIterator.getRunLimit +java.text.AttributedCharacterIterator.implement +java.text.AttributedCharacterIterator.getRunStart +java.text.AttributedCharacterIterator.getAttribute +java.text.DateFormat.equals +java.text.DateFormat.hashCode +java.text.DateFormat.Test +java.text.ACIAttribute.Test +java.text.DecimalFormatSymbols.serial +java.text.DecimalFormatSymbols.GetSet12 +java.text.DecimalFormatSymbols.getCurrency +java.text.DecimalFormatSymbols.DumpDefault11 +java.text.DecimalFormatSymbols.GetSet11 +java.text.DecimalFormatSymbols.DumpDefault12 +java.text.FieldPosition.Test +java.text.SimpleDateFormat.applyPattern +java.text.SimpleDateFormat.Localization +java.text.SimpleDateFormat.applyLocalizedPattern +java.text.SimpleDateFormat.toLocalizedPattern +java.text.SimpleDateFormat.attribute +java.text.SimpleDateFormat.Cloning +java.text.SimpleDateFormat.getDateFormatSymbols +java.text.SimpleDateFormat.parse +java.text.SimpleDateFormat.toPattern +java.text.SimpleDateFormat.constructors +java.text.SimpleDateFormat.setDateFormatSymbols +java.text.SimpleDateFormat.getAndSet2DigitYearStart +java.text.SimpleDateFormat.Test +java.text.Bidi.Basic +java.text.Bidi.reorderVisually +java.math.BigInteger.compareTo +java.math.BigInteger.modInverse +java.math.BigInteger.shift +java.math.BigInteger.serialization +java.math.BigInteger.add +java.math.BigInteger.TestOfPR27372 +java.math.BigInteger.signum +java.math.BigInteger.modPow +java.math.BigInteger.equals +java.math.BigInteger.divide +java.math.BigInteger.setBit +java.math.BigInteger.multiply +java.math.BigInteger.TestOfToByteArray +java.math.BigInteger.toString +java.math.BigInteger.ctor +java.math.BigInteger.abs +java.math.BigInteger.valueOf +java.math.BigDecimal.compareTo +java.math.BigDecimal.divide +java.math.BigDecimal.DiagBigDecimal +java.math.BigDecimal.construct +java.math.BigDecimal.setScale +java.security.MessageDigest.Instance +java.security.AccessController.doPrivileged +java.security.AccessController.contexts +java.security.Security.getAlgorithms +java.security.Security.provider +java.security.Provider.NameVersionInfo +java.security.SecureRandom.SHA1PRNG +java.security.SecureRandom.TestOfPR23899 +java.security.SecureRandom.Instance +java.security.KeyPairGenerator.getInstance14 +java.security.AlgorithmParameters.getInstance14 +java.security.AlgorithmParameterGenerator.getInstance14 +java.security.DigestInputStream.readMD5 +java.security.KeyFactory.getInstance14 +java.security.Signature.getInstance14 +java.security.Signature.Instance +java.security.BasicPermission.newPermission +java.sql.Clob.ClobTest +java.sql.Types.TestJdbc10 +java.sql.Types.TestJdbc20 +java.sql.Array.ArrayTest +java.sql.Blob.BlobTest +java.sql.Connection.TestJdbc +java.sql.Time.TimeTest +java.sql.DriverManager.DriverManagerTest +java.sql.Date.DateTest +java.sql.DatabaseMetaData.TestJdbc +java.sql.Timestamp.TimestampTest +java.io.RandomAccessFile.setLength +java.io.RandomAccessFile.security +java.io.RandomAccessFile.jdk11 +java.io.RandomAccessFile.randomaccessfile +java.io.BufferedWriter.Test +java.io.PipedReaderWriter.Test +java.io.PushbackInputStream.ProtectedVars +java.io.PushbackInputStream.BufferOverflow +java.io.PushbackInputStream.Unread +java.io.FileOutputStream.append +java.io.FileOutputStream.fileoutputstream +java.io.FileOutputStream.security +java.io.FileOutputStream.write +java.io.FileOutputStream.jdk12 +java.io.StringWriter.Test +java.io.FilterOutputStream.write +java.io.ObjectInputStream.security +java.io.ObjectInputStream.readResolve +java.io.ObjectInputStream.ClassLoaderTest +java.io.ObjectOutputStream.security +java.io.ObjectOutputStream.StreamDataTest +java.io.ObjectOutputStream.useProtocolVersion +java.io.InputStream.Test +java.io.Utf8Encoding.ReadReference +java.io.Utf8Encoding.WriteRead +java.io.FilePermission.traversal2 +java.io.FilePermission.simple +java.io.FilePermission.traversal +java.io.FileWriter.jdk11 +java.io.OutputStreamWriter.jdk11 +java.io.Serializable.BreakMe +java.io.Serializable.BreakMeTestSer +java.io.Serializable.ParentReadResolve +java.io.Serializable.readResolve +java.io.Serializable.ParentWriteReplace +java.io.ObjectInputOutput.LoopSerializationTest +java.io.ObjectInputOutput.ExtTest +java.io.ObjectInputOutput.Deserializable +java.io.ObjectInputOutput.ProxySerializationTest +java.io.ObjectInputOutput.Compat1 +java.io.ObjectInputOutput.SerTest +java.io.ObjectInputOutput.HierarchyTest +java.io.ObjectInputOutput.OutputTest +java.io.ObjectInputOutput.InputTest +java.io.PrintWriter.jdk11 +java.io.PrintWriter.checkError +java.io.SequenceInputStream.Test +java.io.StringBufferInputStream.ProtectedVars +java.io.StringBufferInputStream.SimpleRead +java.io.StringBufferInputStream.MarkReset +java.io.LineNumberReader.Test2 +java.io.LineNumberReader.mark +java.io.LineNumberReader.Test +java.io.InputStreamReader.hang +java.io.InputStreamReader.utf8 +java.io.InputStreamReader.jdk11 +java.io.InputStreamReader.except +java.io.InputStreamReader.getEncoding +java.io.DataInputStream.readLine +java.io.DataInputStream.ReadReference +java.io.DataInputStream.ReadReference2 +java.io.FilterWriter.write +java.io.CharArrayWriter.ProtectedVars +java.io.CharArrayWriter.BasicTests +java.io.FileDescriptor.jdk11 +java.io.Reader.Test +java.io.PushbackReader.BufferOverflow +java.io.PushbackReader.Unread +java.io.ByteArrayOutputStream.subclass +java.io.ByteArrayOutputStream.write +java.io.PrintStream.subclass +java.io.PrintStream.encodings +java.io.ObjectStreamClass.ProxyTest +java.io.ObjectStreamClass.Test +java.io.FilterReader.SimpleRead +java.io.FilterReader.MarkReset +java.io.BufferedOutputStream.interrupt +java.io.BufferedOutputStream.Test +java.io.BufferedInputStream.Skip +java.io.BufferedInputStream.BigMark +java.io.BufferedInputStream.ProtectedVars +java.io.BufferedInputStream.ZeroRead +java.io.BufferedInputStream.SimpleRead +java.io.BufferedInputStream.MarkReset +java.io.BufferedReader.mark +java.io.BufferedReader.SimpleRead +java.io.BufferedReader.MarkReset +java.io.BufferedReader.boundary +java.io.DataOutputStream.WriteRead2 +java.io.DataOutputStream.writeUTF +java.io.DataOutputStream.WriteRead +java.io.PipedStream.close +java.io.PipedStream.receive +java.io.PipedStream.Test +java.io.FileInputStream.fileinputstream +java.io.FileInputStream.read +java.io.FileInputStream.security +java.io.Writer.Test +java.io.FilterInputStream.SimpleRead +java.io.FilterInputStream.MarkReset +java.io.FileReader.jdk11 +java.io.StringReader.Test +java.io.ByteArrayInputStream.ProtectedVars +java.io.ByteArrayInputStream.SimpleRead +java.io.ByteArrayInputStream.MarkReset +java.io.File.newFileURI +java.io.File.URI +java.io.File.createFile +java.io.File.security +java.io.File.ReadMethods +java.io.File.ExecuteMethods +java.io.File.list +java.io.File.jdk11 +java.io.File.newFile +java.io.File.WriteMethods +java.io.File.canWrite +java.io.File.listFiles +java.io.File.emptyFile +java.io.File.UnicodeURI +java.io.OutputStream.Test +java.io.StreamTokenizer.WordWhiteChars +java.io.StreamTokenizer.slashstar +java.io.StreamTokenizer.commentchar +java.io.StreamTokenizer.slashslash +java.io.StreamTokenizer.newline +java.io.StreamTokenizer.misc +java.io.StreamTokenizer.Test +java.io.LineNumberInputStream.Test +java.io.CharArrayReader.ProtectedVars +java.io.CharArrayReader.OutOfBounds +java.io.CharArrayReader.SimpleRead +java.io.CharArrayReader.MarkReset +java.util.Stack.AcuniaStackTest +java.util.Arrays.asList +java.util.Arrays.fill +java.util.Arrays.equals +java.util.Arrays.sort +java.util.Arrays.binarySearch +java.util.Properties.getProperty +java.util.Properties.AcuniaPropertiesTest +java.util.Properties.load +java.util.TreeSet.basic +java.util.Observable.observable +java.util.StringTokenizer.hasMoreElements +java.util.StringTokenizer.hasMoreTokens +java.util.StringTokenizer.countTokens +java.util.StringTokenizer.nextToken +java.util.StringTokenizer.constructors +java.util.StringTokenizer.nextElement +java.util.IdentityHashMap.simple +java.util.prefs.PreferenceTest +java.util.Hashtable.HashContains +java.util.Hashtable.AcuniaHashtableTest +java.util.Hashtable.EnumerateAndModify +java.util.Hashtable.basic +java.util.Hashtable.ContainsHash +java.util.Hashtable.NullValue +java.util.TreeMap.serialization +java.util.TimeZone.setDefault +java.util.TimeZone.zdump +java.util.TimeZone.setID +java.util.UUID.TestAll +java.util.Currency.Constructors +java.util.Currency.Germany +java.util.Currency.ReferenceEquality +java.util.Currency.France +java.util.Currency.getInstance +java.util.Currency.Japan +java.util.Currency.UK +java.util.Currency.Korea +java.util.Currency.PRC +java.util.Currency.Canada +java.util.Currency.CanadaFrench +java.util.Currency.China +java.util.Currency.Taiwan +java.util.Currency.Italy +java.util.AbstractCollection.AcuniaAbstractCollectionTest +java.util.AbstractCollection.AcuniaAddCollectionTest +java.util.AbstractCollection.toString +java.util.SimpleTimeZone.clone +java.util.SimpleTimeZone.hasSameRules +java.util.SimpleTimeZone.getRawOffset +java.util.SimpleTimeZone.setRawOffset +java.util.SimpleTimeZone.check14 +java.util.SimpleTimeZone.equals +java.util.SimpleTimeZone.inDaylightTime +java.util.SimpleTimeZone.setStartYear +java.util.SimpleTimeZone.constructors +java.util.SimpleTimeZone.getOffset +java.util.SimpleTimeZone.setDSTSavings +java.util.SimpleTimeZone.hashCode +java.util.SimpleTimeZone.constants +java.util.SimpleTimeZone.getDSTSavings +java.util.AbstractList.AcuniaAbstractListTest +java.util.Collections.nCopies +java.util.Collections.fill +java.util.Collections.max +java.util.Collections.copy +java.util.Collections.rotate +java.util.Collections.unmodifiableList +java.util.Collections.min +java.util.Collections.unmodifiableMap +java.util.Collections.reverse +java.util.Collections.reverseOrder +java.util.Collections.sort +java.util.Collections.binarySearch +java.util.logging.SocketHandler.SocketHandler +java.util.logging.XMLFormatter.getTail +java.util.logging.Handler.isLoggable +java.util.logging.Handler.setEncoding +java.util.logging.Handler.setFilter +java.util.logging.Handler.getErrorManager +java.util.logging.Handler.reportError +java.util.logging.Handler.setLevel +java.util.logging.Handler.setErrorManager +java.util.logging.LogRecord.getThreadID +java.util.logging.LogRecord.setLoggerName +java.util.logging.LogRecord.getMillis +java.util.logging.LogRecord.setThrown +java.util.logging.LogRecord.setThreadID +java.util.logging.LogRecord.setSequenceNumber +java.util.logging.LogRecord.setSourceMethodName +java.util.logging.LogRecord.setResourceBundle +java.util.logging.LogRecord.setMillis +java.util.logging.LogRecord.setMessage +java.util.logging.LogRecord.setParameters +java.util.logging.LogRecord.setSourceClassName +java.util.logging.LogRecord.setLevel +java.util.logging.Level.intValue +java.util.logging.Level.equals +java.util.logging.Level.getName +java.util.logging.Level.parse +java.util.logging.Level.toString +java.util.logging.Level.hashCode +java.util.logging.LogManager.readConfiguration +java.util.logging.LoggingMXBean.Test +java.util.logging.Logger.hierarchyChecks +java.util.logging.Logger.getName +java.util.logging.Logger.getAnonymousLogger +java.util.logging.Logger.securityChecks +java.util.logging.Logger.getParent +java.util.logging.Logger.global +java.util.Iterator.ConcurrentModification +java.util.BitSet.AcuniaBitSetTest +java.util.BitSet.flip +java.util.BitSet.jdk10 +java.util.BitSet.get +java.util.BitSet.clear +java.util.Timer.taskException +java.util.GregorianCalendar.first +java.util.GregorianCalendar.setFirstDayOfWeek +java.util.GregorianCalendar.dayOfWeekInMonth +java.util.GregorianCalendar.setWeekOfMonth +java.util.GregorianCalendar.internal +java.util.GregorianCalendar.equals +java.util.GregorianCalendar.getMinimum +java.util.GregorianCalendar.getMinimalDaysInFirstWeek +java.util.GregorianCalendar.conversion +java.util.GregorianCalendar.weekOfYear +java.util.Random.basic +java.util.AbstractSet.AcuniaAbstractSetTest +java.util.Calendar.TimeZone +java.util.Calendar.ampm +java.util.Calendar.add +java.util.Calendar.minmax +java.util.Calendar.setTime +java.util.Calendar.setTimeZone +java.util.Calendar.getInstance +java.util.Calendar.set +java.util.Calendar.simple +java.util.Calendar.roll +java.util.Calendar.dstOffset +java.util.regex.Matcher.hitEnd +java.util.regex.Pattern.UnicodeSimpleCategory +java.util.regex.Pattern.pcrematches +java.util.regex.Pattern.matches +java.util.regex.PatternSplit +java.util.regex.CharacterClasses +java.util.AbstractSequentialList.AcuniaAbstractSequentialListTest +java.util.LinkedList.subList +java.util.LinkedList.AcuniaLinkedListTest +java.util.LinkedList.SubListTest +java.util.HashMap.AcuniaHashMapTest +java.util.jar.JarInputStream.getNextEntry +java.util.jar.JarFile.TestOfManifest +java.util.jar.JarFile.basic +java.util.Vector.subList +java.util.Vector.copyInto +java.util.Vector.removeAll +java.util.Vector.retainAll +java.util.Vector.VectorSerialization +java.util.zip.ZipEntry.time +java.util.zip.ZipEntry.Size +java.util.zip.ZipEntry.newZipEntry +java.util.zip.ZipEntry.setComment +java.util.zip.ZipInputStream.close +java.util.zip.ZipInputStream.basic +java.util.zip.Deflater.PR27435 +java.util.zip.Adler32.checksum +java.util.zip.GZIPInputStream.PR24461 +java.util.zip.GZIPInputStream.basic +java.util.zip.InflaterInputStream.basic +java.util.zip.ZipFile.DirEntryTest +java.util.zip.ZipFile.NoEntryTest +java.util.zip.ZipFile.newZipFile +java.util.Date.compareTo +java.util.Date.clone +java.util.Date.before +java.util.Date.serialization +java.util.Date.range +java.util.Date.equals +java.util.Date.parse +java.util.Date.after +java.util.Date.getTimezoneOffset +java.util.LinkedHashMap.LinkedHashMapTest +java.util.LinkedHashMap.Regress +java.util.ArrayList.subList +java.util.ArrayList.serial +java.util.ResourceBundle.getBundle +java.util.AbstractMap.AcuniaAbstractMapTest +java.beans.XMLDecoder.jdk14 +java.beans.Expression.check +java.beans.Introspector.getBeanInfo2 +java.beans.Introspector.getBeanInfo4 +java.beans.Introspector.getBeanInfo +java.beans.Introspector.jdk11 +java.beans.Introspector.jdk12 +java.beans.Introspector.getBeanInfo2_2 +java.beans.DesignMode.constants +java.beans.PropertyEditorSupport.setValue +java.beans.PropertyEditorSupport.getSource +java.beans.SimpleBeanInfo.getIcon +java.beans.SimpleBeanInfo.getDefaultPropertyIndex +java.beans.SimpleBeanInfo.getEventSetDescriptors +java.beans.SimpleBeanInfo.getDefaultEventIndex +java.beans.SimpleBeanInfo.getBeanDescriptor +java.beans.SimpleBeanInfo.getAdditionalBeanInfo +java.beans.SimpleBeanInfo.loadImage +java.beans.EventSetDescriptor.constructorTest1 +java.beans.FeatureDescriptor.check +java.beans.beancontext.BeanContextSupport.toArray +java.beans.beancontext.BeanContextSupport.getChildPropertyChangeListener +java.beans.beancontext.BeanContextSupport.serialize +java.beans.beancontext.BeanContextSupport.getChildBeanContextChild +java.beans.beancontext.BeanContextSupport.getChildBeanContextMembershipListener +java.beans.beancontext.BeanContextSupport.setDesignTime +java.beans.beancontext.BeanContextSupport.getChildVisibility +java.beans.beancontext.BeanContextSupport.constructors +java.beans.beancontext.BeanContextSupport.getChildVetoableChangeListener +java.beans.beancontext.BeanContextSupport.getChildSerializable +java.beans.beancontext.BeanContextSupport.getBeanContextPeer +java.beans.beancontext.BeanContextServicesSupport.getChildBeanContextServicesListener +java.beans.beancontext.InstantiateChild +java.beans.beancontext.Remove +java.beans.beancontext.Array +java.beans.beancontext.Add +java.beans.PropertyChangeSupport.firePropertyChange +java.beans.VetoableChangeSupport.addVetoableChangeListener +java.beans.Statement.check +java.beans.Beans.instantiate_1 +java.beans.EventHandler.check +java.beans.EventHandler.check14b +java.beans.PropertyDescriptor.constructorTest2 +java.beans.PropertyDescriptor.constructorTest1 +java.beans.MethodDescriptor.constructorTest1 +java.awt.AWTEvent.constants +java.awt.CardLayout.show +java.awt.CardLayout.first +java.awt.CardLayout.testMaximumLayoutSize +java.awt.CardLayout.testMinimumLayoutSize +java.awt.Graphics.clearRect +java.awt.Polygon.contains +java.awt.Polygon.getPathIterator +java.awt.BasicStroke.equals +java.awt.BasicStroke.constructors +java.awt.BasicStroke.hashCode +java.awt.BasicStroke.constants +java.awt.Graphics2D.setClip +java.awt.Graphics2D.getClip +java.awt.Graphics2D.getClipBounds +java.awt.Graphics2D.setTransform +java.awt.Graphics2D.clip +java.awt.Graphics2D.transform +java.awt.Point.move +java.awt.Point.clone +java.awt.Point.equals +java.awt.Point.constructors +java.awt.Point.setLocation +java.awt.Point.translate +java.awt.Point.getLocation +java.awt.event.ComponentEvent.paramString +java.awt.image.ShortLookupTable.getTable +java.awt.image.ShortLookupTable.lookupPixel +java.awt.image.ShortLookupTable.constructors +java.awt.image.PixelGrabber.SimpleGrabber +java.awt.image.PixelGrabber.testNullProducer +java.awt.image.ConvolveOp.getEdgeCondition +java.awt.image.ConvolveOp.getKernel +java.awt.image.ConvolveOp.filterRaster +java.awt.image.ConvolveOp.getRenderingHints +java.awt.image.ConvolveOp.getPoint2D +java.awt.image.ConvolveOp.createCompatibleDestRaster +java.awt.image.ConvolveOp.constructors +java.awt.image.ConvolveOp.getBounds2D +java.awt.image.ConvolveOp.constants +java.awt.image.IndexColorModel.getGreens +java.awt.image.IndexColorModel.getComponentSize +java.awt.image.IndexColorModel.getTransparentPixel +java.awt.image.IndexColorModel.getColorSpace +java.awt.image.IndexColorModel.getAlphas +java.awt.image.IndexColorModel.getPixelSize +java.awt.image.IndexColorModel.isValid +java.awt.image.IndexColorModel.constructors +java.awt.image.IndexColorModel.getBlues +java.awt.image.IndexColorModel.getReds +java.awt.image.IndexColorModel.getTransparency +java.awt.image.DataBuffer.getDataTypeSize +java.awt.image.DataBuffer.getOffset +java.awt.image.DataBuffer.constants +java.awt.image.DataBuffer.getOffsets +java.awt.image.DataBufferUShort.getData +java.awt.image.DataBufferUShort.getBankData +java.awt.image.DataBufferUShort.setElem +java.awt.image.DataBufferUShort.getElem +java.awt.image.DataBufferUShort.getDataType +java.awt.image.DataBufferUShort.constructors +java.awt.image.ComponentSampleModel.setPixels +java.awt.image.ComponentSampleModel.getPixelStride +java.awt.image.ComponentSampleModel.getDataElements +java.awt.image.ComponentSampleModel.getSample +java.awt.image.ComponentSampleModel.getBandOffsets +java.awt.image.ComponentSampleModel.equals +java.awt.image.ComponentSampleModel.getPixel +java.awt.image.ComponentSampleModel.getNumDataElements +java.awt.image.ComponentSampleModel.getSamples +java.awt.image.ComponentSampleModel.getSampleSize +java.awt.image.ComponentSampleModel.getSampleFloat +java.awt.image.ComponentSampleModel.setDataElements +java.awt.image.ComponentSampleModel.constructors +java.awt.image.ComponentSampleModel.setPixel +java.awt.image.ComponentSampleModel.createDataBuffer +java.awt.image.ComponentSampleModel.getOffset +java.awt.image.ComponentSampleModel.getSampleDouble +java.awt.image.ComponentSampleModel.createCompatibleSampleModel +java.awt.image.ComponentSampleModel.setSamples +java.awt.image.ComponentSampleModel.hashCode +java.awt.image.ComponentSampleModel.getPixels +java.awt.image.ComponentSampleModel.getScanlineStride +java.awt.image.ComponentSampleModel.createSubsetSampleModel +1 problem (1 error)java.awt.image.ColorModel.getComponentSize +java.awt.image.ColorModel.getRGBdefault +java.awt.image.ColorModel.constructors +java.awt.image.LookupTable.constructor +java.awt.image.LookupTable.getNumComponents +java.awt.image.RescaleOp.getScaleFactors +java.awt.image.RescaleOp.getRenderingHints +java.awt.image.RescaleOp.getPoint2D +java.awt.image.RescaleOp.constructors +java.awt.image.RescaleOp.getNumFactors +java.awt.image.RescaleOp.getOffsets +java.awt.image.DirectColorModel.coerceData +java.awt.image.WritableRaster.createChild +java.awt.image.WritableRaster.createWritableChild +java.awt.image.ComponentColorModel.coerceData +java.awt.image.SampleModel.setPixels +java.awt.image.SampleModel.getSample +java.awt.image.SampleModel.getPixel +java.awt.image.SampleModel.getSamples +java.awt.image.SampleModel.getSampleSize +java.awt.image.SampleModel.getSampleFloat +java.awt.image.SampleModel.setPixel +java.awt.image.SampleModel.setSample +java.awt.image.SampleModel.createDataBuffer +java.awt.image.SampleModel.getSampleDouble +java.awt.image.SampleModel.setSamples +java.awt.image.SampleModel.getPixels +java.awt.image.BandCombineOp.getPoint2D +java.awt.image.BandCombineOp.createCompatibleDestRaster +java.awt.image.BandCombineOp.getBounds2D +java.awt.image.BandCombineOp.filter +java.awt.image.LookupOp.constructor +java.awt.image.LookupOp.filterRaster +java.awt.image.LookupOp.getRenderingHints +java.awt.image.LookupOp.getTable +java.awt.image.LookupOp.getPoint2D +java.awt.image.Kernel.getYOrigin +java.awt.image.Kernel.constructor +java.awt.image.Kernel.getXOrigin +java.awt.image.Kernel.getHeight +java.awt.image.Kernel.check +java.awt.image.Kernel.getKernelData +java.awt.image.Kernel.getWidth +java.awt.image.BufferedImage.getSubimage +java.awt.image.BufferedImage.getSetRgb1Pixel +java.awt.image.DataBufferByte.getData +java.awt.image.DataBufferByte.getBankData +java.awt.image.DataBufferByte.setElem +java.awt.image.DataBufferByte.getElem +java.awt.image.DataBufferByte.getDataType +java.awt.image.DataBufferByte.constructors +java.awt.image.DataBufferShort.getData +java.awt.image.DataBufferShort.getBankData +java.awt.image.DataBufferShort.setElem +java.awt.image.DataBufferShort.getElem +java.awt.image.DataBufferShort.getDataType +java.awt.image.DataBufferShort.constructors +java.awt.image.Raster.createChild +java.awt.image.DataBufferInt.getData +java.awt.image.DataBufferInt.getBankData +java.awt.image.DataBufferInt.setElem +java.awt.image.DataBufferInt.getElem +java.awt.image.DataBufferInt.getDataType +java.awt.image.DataBufferInt.constructors +java.awt.image.SinglePixelPackedSampleModel.getBitOffsets +java.awt.image.SinglePixelPackedSampleModel.getDataElements +java.awt.image.SinglePixelPackedSampleModel.getSample +java.awt.image.SinglePixelPackedSampleModel.equals +java.awt.image.SinglePixelPackedSampleModel.getPixel +java.awt.image.SinglePixelPackedSampleModel.getNumDataElements +java.awt.image.SinglePixelPackedSampleModel.getSamples +java.awt.image.SinglePixelPackedSampleModel.getSampleSize +java.awt.image.SinglePixelPackedSampleModel.setDataElements +java.awt.image.SinglePixelPackedSampleModel.constructors +java.awt.image.SinglePixelPackedSampleModel.getBitMasks +java.awt.image.SinglePixelPackedSampleModel.setPixel +java.awt.image.SinglePixelPackedSampleModel.setSample +java.awt.image.SinglePixelPackedSampleModel.createDataBuffer +java.awt.image.SinglePixelPackedSampleModel.getOffset +java.awt.image.SinglePixelPackedSampleModel.createCompatibleSampleModel +java.awt.image.SinglePixelPackedSampleModel.hashCode +java.awt.image.SinglePixelPackedSampleModel.getPixels +java.awt.image.SinglePixelPackedSampleModel.getScanlineStride +java.awt.image.SinglePixelPackedSampleModel.createSubsetSampleModel +java.awt.image.ByteLookupTable.getTable +java.awt.image.ByteLookupTable.lookupPixel +java.awt.image.ByteLookupTable.constructors +java.awt.image.MultiPixelPackedSampleModel.getBitOffset +java.awt.image.MultiPixelPackedSampleModel.getTransferType +java.awt.image.MultiPixelPackedSampleModel.getDataElements +java.awt.image.MultiPixelPackedSampleModel.getSample +java.awt.image.MultiPixelPackedSampleModel.equals +java.awt.image.MultiPixelPackedSampleModel.getPixel +java.awt.image.MultiPixelPackedSampleModel.getSampleSize +java.awt.image.MultiPixelPackedSampleModel.setDataElements +java.awt.image.MultiPixelPackedSampleModel.constructors +java.awt.image.MultiPixelPackedSampleModel.setPixel +java.awt.image.MultiPixelPackedSampleModel.setSample +java.awt.image.MultiPixelPackedSampleModel.createDataBuffer +java.awt.image.MultiPixelPackedSampleModel.getPixelBitStride +java.awt.image.MultiPixelPackedSampleModel.getOffset +java.awt.image.MultiPixelPackedSampleModel.createCompatibleSampleModel +java.awt.image.MultiPixelPackedSampleModel.hashCode +java.awt.image.MultiPixelPackedSampleModel.getScanlineStride +java.awt.image.MultiPixelPackedSampleModel.createSubsetSampleModel +java.awt.image.AffineTransformOp.getPoint2D +java.awt.image.AffineTransformOp.createCompatibleDestRaster +java.awt.image.AffineTransformOp.constructors +java.awt.image.AffineTransformOp.getBounds2D +java.awt.image.PixelInterleavedSampleModel.createSubsetSampleModel +java.awt.image.BandedSampleModel.setPixels +java.awt.image.BandedSampleModel.getDataElements +java.awt.image.BandedSampleModel.getSample +java.awt.image.BandedSampleModel.getPixel +java.awt.image.BandedSampleModel.getSamples +java.awt.image.BandedSampleModel.getSampleFloat +java.awt.image.BandedSampleModel.setDataElements +java.awt.image.BandedSampleModel.constructors +java.awt.image.BandedSampleModel.setPixel +java.awt.image.BandedSampleModel.setSample +java.awt.image.BandedSampleModel.createDataBuffer +java.awt.image.BandedSampleModel.getSampleDouble +java.awt.image.BandedSampleModel.createCompatibleSampleModel +java.awt.image.BandedSampleModel.setSamples +java.awt.image.BandedSampleModel.hashCode +java.awt.image.BandedSampleModel.getPixels +java.awt.image.BandedSampleModel.createSubsetSampleModel +java.awt.image.ColorConvertOp.filterRaster +java.awt.image.ColorConvertOp.getPoint2D +java.awt.image.ColorConvertOp.createCompatibleDestRaster +java.awt.image.ColorConvertOp.constructors +java.awt.image.ColorConvertOp.getBounds2D +java.awt.ScrollPaneAdjustable.paramString +java.awt.GridBagLayout.AdjustForGravity +java.awt.GridBagLayout.toString +java.awt.Dimension.clone +java.awt.Dimension.equals +java.awt.Dimension.setSize +java.awt.Dimension.getSize +java.awt.Dimension.constructors +java.awt.TextField.getPreferredSize +java.awt.TextField.getMinimumSize +java.awt.TextField.constructors +java.awt.BorderLayout.layoutContainer +java.awt.BorderLayout.getHgap +java.awt.BorderLayout.maxLayoutSize +java.awt.BorderLayout.setVgap +java.awt.BorderLayout.getVgap +java.awt.BorderLayout.getLayoutAlignmentY +java.awt.BorderLayout.Test15 +java.awt.BorderLayout.getLayoutAlignmentX +java.awt.BorderLayout.setHgap +java.awt.BorderLayout.constructors +java.awt.BorderLayout.constants +java.awt.BorderLayout.preferredLayoutSize +java.awt.BorderLayout.addLayoutComponent +java.awt.Scrollbar.testSetBlockIncrement +java.awt.Scrollbar.testSetUnitIncrement +java.awt.Scrollbar.testSetValues +java.awt.List.testSelected +java.awt.ScrollPane.add +java.awt.ScrollPane.getScrollPosition +java.awt.ScrollPane.testSetLayout +java.awt.ScrollPane.setScrollPosition +java.awt.ScrollPane.doLayout +java.awt.Choice.getSelected +java.awt.Choice.remove +java.awt.KeyboardFocusManager.getFocusOwner +java.awt.KeyboardFocusManager.getGlobalPermanentFocusOwner +java.awt.KeyboardFocusManager.getGlobalFocusOwner +java.awt.AWTPermission.constructor +java.awt.ColorClass.decode +java.awt.ColorClass.serialization +java.awt.ColorClass.equals +java.awt.ColorClass.getGreen +java.awt.ColorClass.constructors +java.awt.ColorClass.brighter +java.awt.ColorClass.hashCode +java.awt.ColorClass.constants +java.awt.ColorClass.getBlue +java.awt.ColorClass.getRed +java.awt.RenderingHints.Key.isCompatibleValue +java.awt.RenderingHints.clone +java.awt.RenderingHints.keySet +java.awt.RenderingHints.put +java.awt.RenderingHints.add +java.awt.RenderingHints.putAll +java.awt.RenderingHints.entrySet +java.awt.RenderingHints.equals +java.awt.RenderingHints.size +java.awt.RenderingHints.get +java.awt.RenderingHints.values +java.awt.RenderingHints.containsValue +java.awt.RenderingHints.isEmpty +java.awt.RenderingHints.remove +java.awt.RenderingHints.clear +java.awt.Panel.TestPanelRepaint +java.awt.AWTKeyStroke.serialization +java.awt.AWTKeyStroke.equals +java.awt.AWTKeyStroke.getAWTKeyStroke +java.awt.Rectangle.clone +java.awt.Rectangle.add +java.awt.Rectangle.setRect +java.awt.Rectangle.setBounds +java.awt.Rectangle.equals +java.awt.Rectangle.intersects +java.awt.Rectangle.setSize +java.awt.Rectangle.grow +java.awt.Rectangle.outcode +java.awt.Rectangle.union +java.awt.Rectangle.constructors +java.awt.Rectangle.intersection +java.awt.Rectangle.setLocation +java.awt.Rectangle.translate +java.awt.Rectangle.contains +java.awt.Rectangle.isEmpty +java.awt.Menu.insert +java.awt.AlphaComposite.getInstance +java.awt.AlphaComposite.equals +java.awt.AlphaComposite.getInstance14 +java.awt.AlphaComposite.getRule +java.awt.Window.security +java.awt.Window.focusCycleRootTest +java.awt.EventClass.constants +java.awt.Frame.isDisplayable1 +java.awt.Frame.isDisplayable5 +java.awt.Frame.isDisplayable4 +java.awt.Frame.isDisplayable3 +java.awt.Frame.isDisplayable6 +java.awt.Frame.menubar +java.awt.Frame.isDisplayable2 +java.awt.Frame.isDisplayable7 +java.awt.Container.getListeners +java.awt.Container.setLayout +java.awt.Container.getPreferredSize +java.awt.Container.applyComponentOrientation +java.awt.Container.getComponentAt +java.awt.Container.getAlignmentY +java.awt.Container.getAlignmentX +java.awt.Container.addImpl +java.awt.FontClass.serialization +java.awt.MenuItem.label1 +java.awt.font.TextHitInfo.isLeadingEdge +java.awt.font.TextHitInfo.getOtherHit +java.awt.font.TextHitInfo.leading +java.awt.font.TextHitInfo.getOffsetHit +java.awt.font.TextHitInfo.equals +java.awt.font.TextHitInfo.getCharIndex +java.awt.font.TextHitInfo.afterOffset +java.awt.font.TextHitInfo.getInsertionIndex +java.awt.font.TextHitInfo.toString +java.awt.font.TextHitInfo.beforeOffset +java.awt.font.TextHitInfo.hashCode +java.awt.font.TextHitInfo.trailing +java.awt.font.TransformAttribute.serialization +java.awt.font.TransformAttribute.getTransform +java.awt.font.TransformAttribute.isIdentity +java.awt.font.ShapeGraphicAttribute.ShapeGraphicAttributeTest +java.awt.font.ImageGraphicAttribute.ImageGraphicAttributeTest +java.awt.font.TextAttribute.toString13 +java.awt.font.TextAttribute.serialization +java.awt.font.TextAttribute.toString +java.awt.font.TextAttribute.constants13 +java.awt.font.TextAttribute.constants +java.awt.GradientPaint.getPoint2 +java.awt.GradientPaint.equals +java.awt.GradientPaint.getColor1 +java.awt.GradientPaint.constructors +java.awt.GradientPaint.getColor2 +java.awt.GradientPaint.isCyclic +java.awt.GradientPaint.getTransparency +java.awt.GradientPaint.getPoint1 +java.awt.TextComponent.setSelectionStart +java.awt.Component.repaint +java.awt.Component.getListeners +java.awt.Component.setName +java.awt.Component.properties14 +java.awt.Component.getMaximumSize +java.awt.Component.setMinimumSize +java.awt.Component.getForeground +java.awt.Component.setPreferredSize +java.awt.Component.properties +java.awt.Component.requestFocus +java.awt.Component.isValid +java.awt.Component.getFont +java.awt.Component.setMaximumSize +java.awt.Component.setComponentOrientation +java.awt.datatransfer.DataFlavor.writeExternal +java.awt.datatransfer.StringSelection.selection +java.awt.TextArea.getPreferredSize +java.awt.TextArea.getMinimumSize +java.awt.TextArea.testReplaceText +java.awt.TextArea.constructors +java.awt.TextArea.testAppendText +java.awt.TextArea.testInsertText +java.awt.TextArea.testInvalidConstructorValues +java.awt.color.ColorSpace.isCS_sRGB +java.awt.color.ColorSpace.getInstance +java.awt.FlowLayout.minimumLayoutSize +java.awt.geom.Ellipse2D.Double.clone +java.awt.geom.Ellipse2D.Double.getY +java.awt.geom.Ellipse2D.Double.setFrame +java.awt.geom.Ellipse2D.Double.getHeight +java.awt.geom.Ellipse2D.Double.getX +java.awt.geom.Ellipse2D.Double.constructors +java.awt.geom.Ellipse2D.Double.getBounds2D +java.awt.geom.Ellipse2D.Double.isEmpty +java.awt.geom.Ellipse2D.Double.getWidth +java.awt.geom.Ellipse2D.Float.clone +java.awt.geom.Ellipse2D.Float.getY +java.awt.geom.Ellipse2D.Float.setFrame +java.awt.geom.Ellipse2D.Float.getHeight +java.awt.geom.Ellipse2D.Float.getX +java.awt.geom.Ellipse2D.Float.constructors +java.awt.geom.Ellipse2D.Float.getBounds2D +java.awt.geom.Ellipse2D.Float.isEmpty +java.awt.geom.Ellipse2D.Float.getWidth +java.awt.geom.Ellipse2D.intersects +java.awt.geom.Ellipse2D.contains +java.awt.geom.GeneralPath.getCurrentPoint +java.awt.geom.GeneralPath.GeneralPath +java.awt.geom.GeneralPath.append_PathIterator +java.awt.geom.GeneralPath.contains +java.awt.geom.GeneralPath.getPathIterator +java.awt.geom.RectangularShape.getFrame +java.awt.geom.RectangularShape.setFrame +java.awt.geom.RectangularShape.getMinY +java.awt.geom.RectangularShape.intersects +java.awt.geom.RectangularShape.getMaxY +java.awt.geom.RectangularShape.getMaxX +java.awt.geom.RectangularShape.setFrameFromCenter +java.awt.geom.RectangularShape.setFrameFromDiagonal +java.awt.geom.RectangularShape.getMinX +java.awt.geom.RectangularShape.getCenterX +java.awt.geom.RectangularShape.getCenterY +java.awt.geom.RectangularShape.contains +java.awt.geom.RectangularShape.isEmpty +java.awt.geom.RectangularShape.getBounds +java.awt.geom.Line2D.clone +java.awt.geom.Line2D.getP1 +java.awt.geom.Line2D.linesIntersect +java.awt.geom.Line2D.ptSegDistSq +java.awt.geom.Line2D.relativeCCW +java.awt.geom.Line2D.getP2 +java.awt.geom.Line2D.setLine +java.awt.geom.Line2D.equals +java.awt.geom.Line2D.intersects +java.awt.geom.Line2D.ptLineDistSq +java.awt.geom.Line2D.ptSegDist +java.awt.geom.Line2D.intersectsLine +java.awt.geom.Line2D.contains +java.awt.geom.Line2D.ptLineDist +java.awt.geom.Line2D.getPathIterator +java.awt.geom.Line2D.getBounds +java.awt.geom.Area.clone +java.awt.geom.Area.add +java.awt.geom.Area.isRectangular +java.awt.geom.Area.createTransformedArea +java.awt.geom.Area.isPolygonal +java.awt.geom.Area.intersect +java.awt.geom.Area.equals +java.awt.geom.Area.exclusiveOr +java.awt.geom.Area.intersects +java.awt.geom.Area.reset +java.awt.geom.Area.isSingular +java.awt.geom.Area.constructors +java.awt.geom.Area.getBounds2D +java.awt.geom.Area.contains +java.awt.geom.Area.subtract +java.awt.geom.Area.isEmpty +java.awt.geom.Area.transform +java.awt.geom.Area.getBounds +java.awt.geom.Rectangle2D.Double.clone +java.awt.geom.Rectangle2D.Double.createIntersection +java.awt.geom.Rectangle2D.Double.setRect +java.awt.geom.Rectangle2D.Double.outcode +java.awt.geom.Rectangle2D.Double.createUnion +java.awt.geom.Rectangle2D.Double.isEmpty +java.awt.geom.Rectangle2D.Float.clone +java.awt.geom.Rectangle2D.Float.createIntersection +java.awt.geom.Rectangle2D.Float.setRect +java.awt.geom.Rectangle2D.Float.outcode +java.awt.geom.Rectangle2D.Float.createUnion +java.awt.geom.Rectangle2D.Float.isEmpty +java.awt.geom.Rectangle2D.add +java.awt.geom.Rectangle2D.setFrame +java.awt.geom.Rectangle2D.intersect +java.awt.geom.Rectangle2D.equals +java.awt.geom.Rectangle2D.intersects +java.awt.geom.Rectangle2D.union +java.awt.geom.Rectangle2D.intersectsLine +java.awt.geom.Rectangle2D.getBounds2D +java.awt.geom.Rectangle2D.contains +java.awt.geom.Rectangle2D.constants +java.awt.geom.Rectangle2D.getPathIterator +java.awt.geom.Rectangle2D.getBounds +java.awt.geom.Arc2D.Double.clone +java.awt.geom.Arc2D.Float.clone +java.awt.geom.Arc2D.setFrame +java.awt.geom.Arc2D.setAngleStart +java.awt.geom.Arc2D.setArc +java.awt.geom.Arc2D.setArcByTangent +java.awt.geom.Arc2D.containsAngle +java.awt.geom.Arc2D.setArcByCenter +java.awt.geom.Arc2D.intersects +java.awt.geom.Arc2D.getEndPoint +java.awt.geom.Arc2D.setAngleExtent +java.awt.geom.Arc2D.constructors +java.awt.geom.Arc2D.getBounds2D +java.awt.geom.Arc2D.contains +java.awt.geom.Arc2D.getStartPoint +java.awt.geom.Arc2D.constants +java.awt.geom.Arc2D.isEmpty +java.awt.geom.Arc2D.getPathIterator +java.awt.geom.Arc2D.setAngles +java.awt.geom.Arc2D.setArcType +java.awt.geom.QuadCurve2D.Double.getP1 +java.awt.geom.QuadCurve2D.Double.getP2 +java.awt.geom.QuadCurve2D.Double.getCtrlPt +java.awt.geom.QuadCurve2D.Double.getBounds2D +java.awt.geom.QuadCurve2D.Double.Double +java.awt.geom.QuadCurve2D.Double.setCurve +java.awt.geom.QuadCurve2D.Float.getP1 +java.awt.geom.QuadCurve2D.Float.Float +java.awt.geom.QuadCurve2D.Float.getP2 +java.awt.geom.QuadCurve2D.Float.getCtrlPt +java.awt.geom.QuadCurve2D.Float.getBounds2D +java.awt.geom.QuadCurve2D.Float.setCurve +java.awt.geom.QuadCurve2D.clone +java.awt.geom.QuadCurve2D.getFlatness +java.awt.geom.QuadCurve2D.subdivide +java.awt.geom.QuadCurve2D.getFlatnessSq +java.awt.geom.QuadCurve2D.setCurve +java.awt.geom.QuadCurve2D.getPathIterator +java.awt.geom.CubicCurve2D.Double.getP1 +java.awt.geom.CubicCurve2D.Double.getCtrlP2 +java.awt.geom.CubicCurve2D.Double.getP2 +java.awt.geom.CubicCurve2D.Double.getBounds2D +java.awt.geom.CubicCurve2D.Double.Double +java.awt.geom.CubicCurve2D.Double.setCurve +java.awt.geom.CubicCurve2D.Double.getCtrlP1 +java.awt.geom.CubicCurve2D.Float.getP1 +java.awt.geom.CubicCurve2D.Float.getCtrlP2 +java.awt.geom.CubicCurve2D.Float.Float +java.awt.geom.CubicCurve2D.Float.getP2 +java.awt.geom.CubicCurve2D.Float.getBounds2D +java.awt.geom.CubicCurve2D.Float.setCurve +java.awt.geom.CubicCurve2D.Float.getCtrlP1 +java.awt.geom.CubicCurve2D.clone +java.awt.geom.CubicCurve2D.getFlatness +java.awt.geom.CubicCurve2D.subdivide +java.awt.geom.CubicCurve2D.getFlatnessSq +java.awt.geom.CubicCurve2D.setCurve +java.awt.geom.CubicCurve2D.getPathIterator +java.awt.geom.FlatteningPathIterator.FlatteningPathIterator +java.awt.geom.FlatteningPathIterator.getWindingRule +java.awt.geom.FlatteningPathIterator.getFlatness +java.awt.geom.FlatteningPathIterator.getRecursionLimit +java.awt.geom.FlatteningPathIterator.currentSegment +java.awt.geom.AffineTransform.clone +java.awt.geom.AffineTransform.preConcatenate +java.awt.geom.AffineTransform.getRotateInstance +java.awt.geom.AffineTransform.getMatrix +java.awt.geom.AffineTransform.inverseTransform +java.awt.geom.AffineTransform.getScaleInstance +java.awt.geom.AffineTransform.createInverse +java.awt.geom.AffineTransform.deltaTransform +java.awt.geom.AffineTransform.equals +java.awt.geom.AffineTransform.setTransform +java.awt.geom.AffineTransform.constructors +java.awt.geom.AffineTransform.getTranslateInstance +java.awt.geom.AffineTransform.constants +java.awt.geom.AffineTransform.concatenate +java.awt.geom.AffineTransform.getShearInstance +java.awt.geom.AffineTransform.transform +java.awt.geom.AffineTransform.getDeterminant +java.awt.geom.AffineTransform.isIdentity +java.awt.geom.RoundRectangle2D.intersects +java.awt.geom.RoundRectangle2D.contains +java.awt.testName +java.nio.Buffer.IntBufferTest +java.nio.Buffer.ShortBufferTest +java.nio.Buffer.FloatBufferTest +java.nio.Buffer.LongBufferTest +java.nio.Buffer.ByteBufferTest +java.nio.Buffer.DoubleBufferTest +java.nio.Buffer.CharBufferTest +java.nio.LongBuffer.compact +java.nio.ShortBuffer.compact +java.nio.IntBuffer.compareTo +java.nio.IntBuffer.compact +java.nio.channels.Channels.ChannelsTest +java.nio.channels.Selector.testEmptySelect +java.nio.channels.FileChannel.copyIO +java.nio.channels.FileChannel.multibufferIO +java.nio.channels.FileChannel.truncate +java.nio.channels.FileChannel.map +java.nio.channels.FileChannel.offsetSingleBuffer +java.nio.channels.FileChannel.singlebufferIO +java.nio.channels.FileChannel.multidirectbufferIO +java.nio.channels.FileChannel.offsetSingleDirectBuffer +java.nio.DoubleBuffer.compareTo +java.nio.DoubleBuffer.compact +java.nio.ByteBuffer.direct +java.nio.ByteBuffer.compact +java.nio.ByteBuffer.TestAllocateDirect +java.nio.ByteBuffer.GetPut +java.nio.ByteBuffer.putDouble +java.nio.ByteBuffer.Order +java.nio.ByteBuffer.Allocating +java.nio.CharBuffer.compact +java.nio.FloatBuffer.compareTo +java.nio.FloatBuffer.compact +java.nio.charset.Charset.UTF8Charset +java.nio.charset.Charset.utf16 +java.nio.charset.Charset.canEncode +java.nio.charset.Charset.forName diff --git a/nss.cfg b/nss.cfg new file mode 100644 index 000000000..3535a4001 --- /dev/null +++ b/nss.cfg @@ -0,0 +1,4 @@ +name = NSS +nssDbMode = noDb +attributes = compatibility +handleStartupErrors = ignoreMultipleInitialisation diff --git a/patches/Don-t-optimize-fdlibm-fork-for-Zero-on-linux-sparc-Z.patch b/patches/Don-t-optimize-fdlibm-fork-for-Zero-on-linux-sparc-Z.patch new file mode 100644 index 000000000..453e4e796 --- /dev/null +++ b/patches/Don-t-optimize-fdlibm-fork-for-Zero-on-linux-sparc-Z.patch @@ -0,0 +1,27 @@ +From 7ce2609d6ff5299f2ed3ff6850a3cab4a16125f8 Mon Sep 17 00:00:00 2001 +From: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> +Date: Fri, 21 Dec 2018 15:18:17 +0300 +Subject: [PATCH] Don't optimize fdlibm-fork for Zero on linux-sparc (Zero) + +--- + make/hotspot/lib/JvmOverrideFiles.gmk | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/make/hotspot/lib/JvmOverrideFiles.gmk ++++ b/make/hotspot/lib/JvmOverrideFiles.gmk +@@ -51,6 +51,15 @@ LIBJVM_FDLIBM_COPY_OPT_FLAG := $(CXX_O_F + # by using -ffp-contract=off on GCC/Clang platforms. + ifneq ($(FDLIBM_CFLAGS), ) + LIBJVM_FDLIBM_COPY_OPT_FLAG := $(CXX_O_FLAG_NORM) ++ # Don't optimize fdlibm-fork for Zero on Linux sparc ++ # See JDK-XXXX ++ ifeq ($(call check-jvm-feature, zero), true) ++ ifeq ($(OPENJDK_TARGET_OS), linux) ++ ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc) ++ LIBJVM_FDLIBM_COPY_OPT_FLAG := $(CXX_O_FLAG_NONE) ++ endif ++ endif ++ endif + endif + + ifeq ($(call isTargetOs, linux), true) diff --git a/patches/accessible-toolkit.diff b/patches/accessible-toolkit.diff new file mode 100644 index 000000000..b337a9c13 --- /dev/null +++ b/patches/accessible-toolkit.diff @@ -0,0 +1,15 @@ +--- a/jdk/src/share/classes/java/awt/Toolkit.java ++++ b/jdk/src/share/classes/java/awt/Toolkit.java +@@ -894,7 +894,11 @@ + return null; + } + }); +- loadAssistiveTechnologies(); ++ try { ++ loadAssistiveTechnologies(); ++ } catch ( AWTError error) { ++ // ignore silently ++ } + } finally { + // Make sure to always re-enable the JIT. + java.lang.Compiler.enable(); diff --git a/patches/arch-add-ports.diff b/patches/arch-add-ports.diff new file mode 100644 index 000000000..da178abb1 --- /dev/null +++ b/patches/arch-add-ports.diff @@ -0,0 +1,133 @@ +--- a/src/java.base/share/classes/jdk/internal/util/Architecture.java ++++ b/src/java.base/share/classes/jdk/internal/util/Architecture.java +@@ -46,6 +46,13 @@ + LOONGARCH64(64, ByteOrder.LITTLE_ENDIAN), + MIPSEL(32, ByteOrder.LITTLE_ENDIAN), + MIPS64EL(64, ByteOrder.LITTLE_ENDIAN), ++ ALPHA(64, ByteOrder.LITTLE_ENDIAN), ++ ARC(32, ByteOrder.LITTLE_ENDIAN), ++ HPPA(32, ByteOrder.BIG_ENDIAN), ++ IA64(64, ByteOrder.LITTLE_ENDIAN), ++ M68K(32, ByteOrder.BIG_ENDIAN), ++ SH(32, ByteOrder.LITTLE_ENDIAN), ++ X32(32, ByteOrder.LITTLE_ENDIAN), + OTHER(is64bit() ? 64 : 32, ByteOrder.nativeOrder()), + PPC(32, ByteOrder.BIG_ENDIAN), + PPC64(64, ByteOrder.BIG_ENDIAN), +@@ -181,6 +188,69 @@ + } + + /** ++ * {@return {@code true} if the current architecture is ALPHA} ++ * Use {@link #isLittleEndian()} to determine big or little endian. ++ */ ++ @ForceInline ++ public static boolean isALPHA() { ++ return PlatformProps.TARGET_ARCH_IS_ALPHA; ++ } ++ ++ /** ++ * {@return {@code true} if the current architecture is ARC} ++ * Use {@link #isLittleEndian()} to determine big or little endian. ++ */ ++ @ForceInline ++ public static boolean isARC() { ++ return PlatformProps.TARGET_ARCH_IS_ARC; ++ } ++ ++ /** ++ * {@return {@code true} if the current architecture is HPPA} ++ * Use {@link #isLittleEndian()} to determine big or little endian. ++ */ ++ @ForceInline ++ public static boolean isHPPA() { ++ return PlatformProps.TARGET_ARCH_IS_HPPA; ++ } ++ ++ /** ++ * {@return {@code true} if the current architecture is IA64} ++ * Use {@link #isLittleEndian()} to determine big or little endian. ++ */ ++ @ForceInline ++ public static boolean isIA64() { ++ return PlatformProps.TARGET_ARCH_IS_IA64; ++ } ++ ++ /** ++ * {@return {@code true} if the current architecture is X32} ++ * Use {@link #isLittleEndian()} to determine big or little endian. ++ */ ++ @ForceInline ++ public static boolean isX32() { ++ return PlatformProps.TARGET_ARCH_IS_X32; ++ } ++ ++ /** ++ * {@return {@code true} if the current architecture is SH} ++ * Use {@link #isLittleEndian()} to determine big or little endian. ++ */ ++ @ForceInline ++ public static boolean isSH() { ++ return PlatformProps.TARGET_ARCH_IS_SH; ++ } ++ ++ /** ++ * {@return {@code true} if the current architecture is M68K} ++ * Use {@link #isLittleEndian()} to determine big or little endian. ++ */ ++ @ForceInline ++ public static boolean isM68K() { ++ return PlatformProps.TARGET_ARCH_IS_M68K; ++ } ++ ++ /** + * {@return {@code true} if the current architecture is ARM} + */ + @ForceInline +--- a/src/java.base/share/classes/jdk/internal/util/PlatformProps.java.template ++++ b/src/java.base/share/classes/jdk/internal/util/PlatformProps.java.template +@@ -65,5 +65,12 @@ + static final boolean TARGET_ARCH_IS_SPARCV9 = "@@OPENJDK_TARGET_CPU@@" == "sparcv9"; + static final boolean TARGET_ARCH_IS_X86 = "@@OPENJDK_TARGET_CPU@@" == "x86"; + static final boolean TARGET_ARCH_IS_X64 = "@@OPENJDK_TARGET_CPU@@" == "x64"; ++ static final boolean TARGET_ARCH_IS_ALPHA = "@@OPENJDK_TARGET_CPU@@" == "alpha"; ++ static final boolean TARGET_ARCH_IS_ARC = "@@OPENJDK_TARGET_CPU@@" == "arc"; ++ static final boolean TARGET_ARCH_IS_HPPA = "@@OPENJDK_TARGET_CPU@@" == "hppa"; ++ static final boolean TARGET_ARCH_IS_IA64 = "@@OPENJDK_TARGET_CPU@@" == "ia64"; ++ static final boolean TARGET_ARCH_IS_M68K = "@@OPENJDK_TARGET_CPU@@" == "m68k"; ++ static final boolean TARGET_ARCH_IS_SH = "@@OPENJDK_TARGET_CPU@@" == "sh"; ++ static final boolean TARGET_ARCH_IS_X32 = "@@OPENJDK_TARGET_CPU@@" == "x32"; + + } +--- a/test/jdk/jdk/internal/util/ArchTest.java ++++ b/test/jdk/jdk/internal/util/ArchTest.java +@@ -41,6 +41,13 @@ + import static jdk.internal.util.Architecture.SPARCV9; + import static jdk.internal.util.Architecture.X64; + import static jdk.internal.util.Architecture.X86; ++import static jdk.internal.util.Architecture.ALPHA; ++import static jdk.internal.util.Architecture.ARC; ++import static jdk.internal.util.Architecture.HPPA; ++import static jdk.internal.util.Architecture.IA64; ++import static jdk.internal.util.Architecture.SH; ++import static jdk.internal.util.Architecture.X32; ++import static jdk.internal.util.Architecture.M68K; + + import org.junit.jupiter.api.Test; + import org.junit.jupiter.params.ParameterizedTest; +@@ -91,7 +98,14 @@ + Arguments.of("sparcv9", SPARCV9, 64, ByteOrder.BIG_ENDIAN, Architecture.isSPARCV9()), + Arguments.of("x64", X64, 64, ByteOrder.LITTLE_ENDIAN, Architecture.isX64()), + Arguments.of("x86", X86, 32, ByteOrder.LITTLE_ENDIAN, Architecture.isX86()), +- Arguments.of("x86_64", X64, 64, ByteOrder.LITTLE_ENDIAN, Architecture.isX64()) ++ Arguments.of("x86_64", X64, 64, ByteOrder.LITTLE_ENDIAN, Architecture.isX64()), ++ Arguments.of("alpha", ALPHA, 64, ByteOrder.LITTLE_ENDIAN, Architecture.isALPHA()), ++ Arguments.of("arc", ARC, 32, ByteOrder.LITTLE_ENDIAN, Architecture.isARC()), ++ Arguments.of("hppa", HPPA, 32, ByteOrder.BIG_ENDIAN, Architecture.isHPPA()), ++ Arguments.of("ia64", IA64, 64, ByteOrder.LITTLE_ENDIAN, Architecture.isIA64()), ++ Arguments.of("m68k", M68K, 32, ByteOrder.BIG_ENDIAN, Architecture.isM68K()), ++ Arguments.of("sh", SH, 32, ByteOrder.LITTLE_ENDIAN, Architecture.isSH()), ++ Arguments.of("x32", X32, 32, ByteOrder.LITTLE_ENDIAN, Architecture.isX32()) + ); + } + diff --git a/patches/atk-wrapper-security.diff b/patches/atk-wrapper-security.diff new file mode 100644 index 000000000..411500908 --- /dev/null +++ b/patches/atk-wrapper-security.diff @@ -0,0 +1,10 @@ +--- a/src/java.base/share/conf/security/java.security ++++ b/src/java.base/share/conf/security/java.security +@@ -313,6 +313,7 @@ + # + package.access=sun.misc.,\ + sun.reflect.,\ ++ org.GNOME.Accessibility.,\ + + # + # List of comma-separated packages that start with or equal this string diff --git a/patches/default-jvm-cfg.diff b/patches/default-jvm-cfg.diff new file mode 100644 index 000000000..22e1e4b2b --- /dev/null +++ b/patches/default-jvm-cfg.diff @@ -0,0 +1,23 @@ +--- a/src/java.base/share/native/libjli/java.c ++++ b/src/java.base/share/native/libjli/java.c +@@ -2058,7 +2058,7 @@ jint + ReadKnownVMs(const char *jvmCfgName, jboolean speculative) + { + FILE *jvmCfg; +- char line[MAXPATHLEN+20]; ++ char line[MAXPATHLEN+30]; + int cnt = 0; + int lineno = 0; + jlong start = 0, end = 0; +@@ -2072,6 +2072,11 @@ ReadKnownVMs(const char *jvmCfgName, jbo + + jvmCfg = fopen(jvmCfgName, "r"); + if (jvmCfg == NULL) { ++ char cfgName[strlen(jvmCfgName)+10]; ++ sprintf(cfgName, "%s-default", jvmCfgName); ++ jvmCfg = fopen(cfgName, "r"); ++ } ++ if (jvmCfg == NULL) { + if (!speculative) { + JLI_ReportErrorMessage(CFG_ERROR6, jvmCfgName); + exit(1); diff --git a/patches/dnd-files.diff b/patches/dnd-files.diff new file mode 100644 index 000000000..c38bc0103 --- /dev/null +++ b/patches/dnd-files.diff @@ -0,0 +1,20 @@ +--- a/src/java.desktop/unix/classes/sun/awt/X11/XDataTransferer.java ++++ b/src/java.desktop/unix/classes/sun/awt/X11/XDataTransferer.java +@@ -274,14 +274,14 @@ public final class XDataTransferer exten + BufferedReader reader = new BufferedReader(isr)) { + String line; + ArrayList<URI> uriList = new ArrayList<>(); +- URI uri; + while ((line = reader.readLine()) != null) { + try { +- uri = new URI(line); ++ if (!"\0".equals(line)) { ++ uriList.add(new URI(line)); ++ } + } catch (URISyntaxException uriSyntaxException) { + throw new IOException(uriSyntaxException); + } +- uriList.add(uri); + } + return uriList.toArray(new URI[uriList.size()]); + } diff --git a/patches/enumipv6-fix.diff b/patches/enumipv6-fix.diff new file mode 100644 index 000000000..82f73c5c6 --- /dev/null +++ b/patches/enumipv6-fix.diff @@ -0,0 +1,11 @@ +--- openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c~ 2012-02-15 09:26:50.000000000 +0100 ++++ openjdk/jdk/src/solaris/native/java/net/NetworkInterface.c 2012-02-26 14:13:22.602107361 +0100 +@@ -1105,7 +1105,7 @@ + uint8_t ipv6addr[16]; + + if ((f = fopen(_PATH_PROCNET_IFINET6, "r")) != NULL) { +- while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", ++ while (fscanf(f, "%4s%4s%4s%4s%4s%4s%4s%4s %x %x %x %x %20s\n", + addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4], addr6p[5], addr6p[6], addr6p[7], + &if_idx, &plen, &scope, &dad_status, devname) != EOF) { + diff --git a/patches/generated-headers.patch b/patches/generated-headers.patch new file mode 100644 index 000000000..c2d2753b2 --- /dev/null +++ b/patches/generated-headers.patch @@ -0,0 +1,20 @@ +--- a/make/modules/java.desktop/lib/Awt2dLibraries.gmk ++++ b/make/modules/java.desktop/lib/Awt2dLibraries.gmk +@@ -299,7 +299,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIB + INCLUDE_FILES := $(BUILD_LIBLCMS_INCLUDE_FILES), \ + OPTIMIZATION := HIGHEST, \ + CFLAGS := $(CFLAGS_JDKLIB) \ +- $(LCMS_CFLAGS), \ ++ $(LCMS_CFLAGS) -I$(SUPPORT_OUTPUTDIR)/headers/java.desktop, \ + CFLAGS_windows := -DCMS_IS_WINDOWS_, \ + EXTRA_HEADER_DIRS := \ + common/awt/debug \ +@@ -345,7 +345,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIB + NAME := javajpeg, \ + INCLUDE_FILES := $(BUILD_LIBJAVAJPEG_INCLUDE_FILES), \ + OPTIMIZATION := HIGHEST, \ +- CFLAGS := $(CFLAGS_JDKLIB), \ ++ CFLAGS := $(CFLAGS_JDKLIB) -I$(SUPPORT_OUTPUTDIR)/headers/java.desktop, \ + HEADERS_FROM_SRC := $(LIBJPEG_HEADERS_FROM_SRC), \ + DISABLED_WARNINGS_gcc_imageioJPEG.c := clobbered array-bounds, \ + DISABLED_WARNINGS_gcc_jcmaster.c := implicit-fallthrough, \ diff --git a/patches/hotspot-disable-werror.diff b/patches/hotspot-disable-werror.diff new file mode 100644 index 000000000..0ec858322 --- /dev/null +++ b/patches/hotspot-disable-werror.diff @@ -0,0 +1,11 @@ +--- a/src/hotspot/make/linux/makefiles/gcc.make ++++ b/src/hotspot/make/linux/makefiles/gcc.make +@@ -203,7 +203,7 @@ else + endif + + # Compiler warnings are treated as errors +-WARNINGS_ARE_ERRORS ?= -Werror -Wno-error=format ++WARNINGS_ARE_ERRORS ?= + + ifeq ($(USE_CLANG), true) + # However we need to clean the code up before we can unrestrictedly enable this option with Clang diff --git a/patches/hotspot-mips-align.diff b/patches/hotspot-mips-align.diff new file mode 100644 index 000000000..9d8071426 --- /dev/null +++ b/patches/hotspot-mips-align.diff @@ -0,0 +1,11 @@ +--- a/src/hotspot/cpu/zero/zeroInterpreter_zero.cpp ++++ b/src/hotspot/cpu/zero/zeroInterpreter_zero.cpp +@@ -433,7 +433,7 @@ int ZeroInterpreter::native_entry(Method + ThreadStateTransition::transition_from_java(thread, _thread_in_native); + + // Make the call +- intptr_t result[4 - LogBytesPerWord]; ++ intptr_t result[4 - LogBytesPerWord] __attribute__((__aligned__(__alignof__(double)))); + ffi_call(handler->cif(), (void (*)()) function, result, arguments); + + // Change the thread state back to _thread_in_Java and ensure it diff --git a/patches/hotspot-set-compiler.diff b/patches/hotspot-set-compiler.diff new file mode 100644 index 000000000..181b71c62 --- /dev/null +++ b/patches/hotspot-set-compiler.diff @@ -0,0 +1,11 @@ +--- a/src/hotspot/make/linux/makefiles/gcc.make ++++ b/src/hotspot/make/linux/makefiles/gcc.make +@@ -39,7 +39,7 @@ + ifeq ($(USE_CLANG), true) + CXX = clang++ + CC = clang +- else ++ else ifeq ($(CXX),) + CXX = g++ + CC = gcc + endif diff --git a/patches/hotspot-warn-no-errformat.diff b/patches/hotspot-warn-no-errformat.diff new file mode 100644 index 000000000..0628b8935 --- /dev/null +++ b/patches/hotspot-warn-no-errformat.diff @@ -0,0 +1,22 @@ +--- a/src/hotspot/make/solaris/makefiles/gcc.make ++++ b/src/hotspot/make/solaris/makefiles/gcc.make +@@ -117,7 +117,7 @@ endif + + + # Compiler warnings are treated as errors +-WARNINGS_ARE_ERRORS ?= -Werror ++WARNINGS_ARE_ERRORS ?= -Werror -Wno-error=format + + # Enable these warnings. See 'info gcc' about details on these options + WARNING_FLAGS = -Wpointer-arith -Wconversion -Wsign-compare -Wundef -Wformat=2 +--- a/src/hotspot/make/linux/makefiles/gcc.make ++++ b/src/hotspot/make/linux/makefiles/gcc.make +@@ -203,7 +203,7 @@ else + endif + + # Compiler warnings are treated as errors +-WARNINGS_ARE_ERRORS ?= -Werror ++WARNINGS_ARE_ERRORS ?= -Werror -Wno-error=format + + ifeq ($(USE_CLANG), true) + # However we need to clean the code up before we can unrestrictedly enable this option with Clang diff --git a/patches/hsdis-fpic.patch b/patches/hsdis-fpic.patch new file mode 100644 index 000000000..674df4e2a --- /dev/null +++ b/patches/hsdis-fpic.patch @@ -0,0 +1,18 @@ +Description: Link with -fPIC version of binutils + Link against -fPIC binutils library to avoid hard dependency on binutils. +Author: Vladimir Petko <vladimir.petko@canonical.com> +Forwarded: not-needed +Last-Update: 2024-03-19 +--- a/make/autoconf/lib-hsdis.m4 ++++ b/make/autoconf/lib-hsdis.m4 +@@ -257,8 +257,8 @@ AC_DEFUN([LIB_SETUP_HSDIS_BINUTILS], + disasm_header="<dis-asm.h>" + + if test "x$BINUTILS_INSTALL_DIR" = xsystem; then +- AC_CHECK_LIB(bfd, bfd_openr, [ HSDIS_LIBS="-lbfd" ], [ binutils_system_error="libbfd not found" ]) +- AC_CHECK_LIB(opcodes, disassembler, [ HSDIS_LIBS="$HSDIS_LIBS -lopcodes" ], [ binutils_system_error="libopcodes not found" ]) ++ AC_CHECK_LIB(bfd, bfd_openr, [ HSDIS_LIBS="-lbfd_pic -lsframe -lzstd -liberty" ], [ binutils_system_error="libbfd not found" ]) ++ AC_CHECK_LIB(opcodes, disassembler, [ HSDIS_LIBS="$HSDIS_LIBS -lopcodes_pic" ], [ binutils_system_error="libopcodes not found" ]) + AC_CHECK_LIB(z, deflate, [ HSDIS_LIBS="$HSDIS_LIBS -lz" ], [ binutils_system_error="libz not found" ]) + # libiberty is not required on Ubuntu + AC_CHECK_LIB(iberty, xmalloc, [ HSDIS_LIBS="$HSDIS_LIBS -liberty" ]) diff --git a/patches/icc_loading_with_symlink.diff b/patches/icc_loading_with_symlink.diff new file mode 100644 index 000000000..3841265ca --- /dev/null +++ b/patches/icc_loading_with_symlink.diff @@ -0,0 +1,12 @@ +--- a/src/java.desktop/share/classes/java/awt/color/ICC_Profile.java ++++ b/src/java.desktop/share/classes/java/awt/color/ICC_Profile.java +@@ -1395,9 +1395,6 @@ public sealed class ICC_Profile implemen + dir = st.nextToken(); + fullPath = dir + File.separatorChar + fileName; + f = new File(fullPath); +- if (!isChildOf(f, dir)) { +- f = null; +- } + } + } + diff --git a/patches/icedtea-override-redirect-compiz.diff b/patches/icedtea-override-redirect-compiz.diff new file mode 100644 index 000000000..44d3c8feb --- /dev/null +++ b/patches/icedtea-override-redirect-compiz.diff @@ -0,0 +1,10 @@ +--- a/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java ++++ b/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java +@@ -1182,6 +1182,7 @@ class XWindowPeer extends XPanelPeer imp + + boolean isOverrideRedirect() { + return XWM.getWMID() == XWM.OPENLOOK_WM || ++ XWM.getWMID() == XWM.COMPIZ_WM || + Window.Type.POPUP.equals(getWindowType()); + } + diff --git a/patches/include-all-srcs.diff b/patches/include-all-srcs.diff new file mode 100644 index 000000000..f73bfafb7 --- /dev/null +++ b/patches/include-all-srcs.diff @@ -0,0 +1,54 @@ +--- a/src/jdk/make/CreateJars.gmk ++++ b/src/jdk/make/CreateJars.gmk +@@ -569,38 +569,12 @@ + ########################################################################################## + + SRC_ZIP_INCLUDES = \ +- com/sun/corba \ +- com/sun/image/codec/jpeg \ +- com/sun/imageio \ +- com/sun/java_cup \ +- com/sun/javadoc \ +- com/sun/java/swing \ +- com/sun/jmx \ +- com/sun/naming \ +- com/sun/org/apache \ +- com/sun/security/auth \ +- com/sun/security/jgss \ +- com/sun/source \ ++ com \ + java \ +- javax/accessibility \ +- javax/annotation \ +- javax/imageio \ +- javax/lang \ +- javax/management \ +- javax/naming \ +- javax/print \ +- javax/rmi \ +- javax/script \ +- javax/security \ +- javax/sound \ +- javax/sql \ +- javax/swing \ +- javax/tools \ +- javax/xml \ +- org/ietf \ +- org/omg \ +- org/w3c/dom \ +- org/xml/sax \ ++ javax \ ++ jdk \ ++ org \ ++ sun \ + # + + SRC_ZIP_SRCS = $(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes +@@ -632,7 +606,6 @@ + $(eval $(call SetupZipArchive,BUILD_SRC_ZIP, \ + SRC := $(SRC_ZIP_SRCS) $(IMAGES_OUTPUTDIR)/src, \ + INCLUDES := $(SRC_ZIP_INCLUDES) launcher, \ +- EXCLUDES := javax/swing/beaninfo, \ + SUFFIXES := .java .c .h, \ + ZIP := $(IMAGES_OUTPUTDIR)/src.zip, \ + EXTRA_DEPS := $(LAUNCHER_ZIP_SRC))) diff --git a/patches/java-access-bridge-security.diff b/patches/java-access-bridge-security.diff new file mode 100644 index 000000000..2e5d0e1ca --- /dev/null +++ b/patches/java-access-bridge-security.diff @@ -0,0 +1,15 @@ +# patch only used for builds with java-access-bridge support + +--- openjdk/jdk/src/share/lib/security/java.security-linux ++++ openjdk/jdk/src/share/lib/security/java.security-linux +@@ -149,7 +149,9 @@ + com.sun.org.apache.xml.internal.security.,\ + com.sun.org.glassfish.,\ + org.jcp.xml.dsig.internal.,\ +- oracle.jrockit.jfr. ++ oracle.jrockit.jfr.,\ ++ org.GNOME.Accessibility.,\ ++ org.GNOME.Bonobo. + # + # List of comma-separated packages that start with or equal this string + # will cause a security exception to be thrown when diff --git a/patches/jdk-8334502.patch b/patches/jdk-8334502.patch new file mode 100644 index 000000000..6f7f07001 --- /dev/null +++ b/patches/jdk-8334502.patch @@ -0,0 +1,23 @@ +Description: use int instead of time_t to print timezone info + printf() call uses %02d format specifier that requires an int parameter. +Author: Vladimir Petko <vladimir.petko@canonical.com> +Bug: https://bugs.openjdk.org/browse/JDK-8334502 +Last-Update: 2024-06-19 + +diff --git a/src/hotspot/share/runtime/os.cpp b/src/hotspot/share/runtime/os.cpp +index bdf93e1d3b4..d928dc55dce 100644 +--- a/src/hotspot/share/runtime/os.cpp ++++ b/src/hotspot/share/runtime/os.cpp +@@ -209,8 +209,8 @@ char* os::iso8601_time(jlong milliseconds_since_19700101, char* buffer, size_t b + abs_local_to_UTC = -(abs_local_to_UTC); + } + // Convert time zone offset seconds to hours and minutes. +- const time_t zone_hours = (abs_local_to_UTC / seconds_per_hour); +- const time_t zone_min = ++ const int zone_hours = (abs_local_to_UTC / seconds_per_hour); ++ const int zone_min = + ((abs_local_to_UTC % seconds_per_hour) / seconds_per_minute); + + // Print an ISO 8601 date and time stamp into the buffer +-- +2.43.0 diff --git a/patches/jdk-8335238-workaround.patch b/patches/jdk-8335238-workaround.patch new file mode 100644 index 000000000..defc7f573 --- /dev/null +++ b/patches/jdk-8335238-workaround.patch @@ -0,0 +1,24 @@ +Description: disable UnsafeGuard in Unsafe_SetMemory0 for i386 + x86 hotspot aseembler incorrectly returns next instruction's PC + for rep stos %eax,%es:(%edi) causing an infinite loop. + This patch removes UnsafeGuard for i386, so that VM crashes + instead of hanging indefinitely. + Patch should not be forwarded as it reverses JDK-8320886 for + i386. +Author: Vladimir Petko <vladimir.petko@canonical.com> +Bug: https://bugs.openjdk.org/browse/JDK-8335238 +Forwarded: not-needed +Last-Update: 2024-07-01 + +--- a/src/hotspot/share/prims/unsafe.cpp ++++ b/src/hotspot/share/prims/unsafe.cpp +@@ -392,7 +392,9 @@ UNSAFE_ENTRY_SCOPED(void, Unsafe_SetMemo + void* p = index_oop_from_field_offset_long(base, offset); + + { ++#if !defined(IA32) || !defined(TARGET_ARCH_x86) + GuardUnsafeAccess guard(thread); ++#endif + if (StubRoutines::unsafe_setmemory() != nullptr) { + MACOS_AARCH64_ONLY(ThreadWXEnable wx(WXExec, thread)); + StubRoutines::UnsafeSetMemory_stub()(p, sz, value); diff --git a/patches/jdk-8347014-proposed.patch b/patches/jdk-8347014-proposed.patch new file mode 100644 index 000000000..5769bcc36 --- /dev/null +++ b/patches/jdk-8347014-proposed.patch @@ -0,0 +1,26 @@ +Description: set MAP_FIXED_NOREPLACE_value for alpha + OpenJDK fails to build on alpha platform due to the failing assertion + STATIC_ASSERT(MAP_FIXED_NOREPLACE == MAP_FIXED_NOREPLACE_value); + Set MAP_FIXED_NOREPLACE_value to 0x200000 for alpha. +Author: Vladimir Petko <vladimir.petko@canonical.com> +Bug: https://bugs.openjdk.org/browse/JDK-8347014 +Forwarded: no +Last-Update: 2025-01-06 + +--- a/src/hotspot/os/linux/os_linux.cpp ++++ b/src/hotspot/os/linux/os_linux.cpp +@@ -2982,9 +2982,12 @@ + STATIC_ASSERT(MADV_POPULATE_WRITE == MADV_POPULATE_WRITE_value); + #endif + +-// Note that the value for MAP_FIXED_NOREPLACE differs between architectures, but all architectures +-// supported by OpenJDK share the same flag value. ++#if defined(ALPHA) ++#define MAP_FIXED_NOREPLACE_value 0x200000 ++#else + #define MAP_FIXED_NOREPLACE_value 0x100000 ++#endif ++ + #ifndef MAP_FIXED_NOREPLACE + #define MAP_FIXED_NOREPLACE MAP_FIXED_NOREPLACE_value + #else diff --git a/patches/jdk-8377035.diff b/patches/jdk-8377035.diff new file mode 100644 index 000000000..29c397dee --- /dev/null +++ b/patches/jdk-8377035.diff @@ -0,0 +1,72 @@ +From 4e7106d8919652c1dcd4a501a11057e1a8179b3e Mon Sep 17 00:00:00 2001 +From: Harshit <harshitdhiman1402@gmail.com> +Date: Fri, 13 Feb 2026 10:43:26 +0000 +Subject: [PATCH] 8377035: [s390x] Disable JSR166 test cases which uses virtual + threads + +Reviewed-by: jpai, alanb, amitkumar +Bug: https://bugs.openjdk.org/browse/JDK-8377035 +Origin: upstream, https://github.com/openjdk/jdk/commit/4e7106d8919652c1dcd4a501a11057e1a8179b3e + +--- + .../java/util/concurrent/tck/JSR166TestCase.java | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/test/jdk/java/util/concurrent/tck/JSR166TestCase.java b/test/jdk/java/util/concurrent/tck/JSR166TestCase.java +index f1f32bee310..641fbf2e495 100644 +--- a/test/jdk/java/util/concurrent/tck/JSR166TestCase.java ++++ b/test/jdk/java/util/concurrent/tck/JSR166TestCase.java +@@ -37,7 +37,9 @@ + /* + * @test id=default + * @summary Conformance testing variant of JSR-166 tck tests. ++ * @library /test/lib + * @build * ++ * @build jdk.test.lib.Platform + * @modules java.management java.base/jdk.internal.util + * @run junit/othervm/timeout=1000 JSR166TestCase + */ +@@ -46,7 +48,9 @@ + * @test id=forkjoinpool-common-parallelism + * @summary Test implementation details variant of JSR-166 + * tck tests with ForkJoinPool common parallelism. ++ * @library /test/lib + * @build * ++ * @build jdk.test.lib.Platform + * @modules java.management java.base/jdk.internal.util + * @run junit/othervm/timeout=1000 + * --add-opens java.base/java.util.concurrent=ALL-UNNAMED +@@ -68,7 +72,9 @@ + * @summary Remaining test implementation details variant of + * JSR-166 tck tests apart from ForkJoinPool common + * parallelism. ++ * @library /test/lib + * @build * ++ * @build jdk.test.lib.Platform + * @modules java.management java.base/jdk.internal.util + * @run junit/othervm/timeout=1000 + * --add-opens java.base/java.util.concurrent=ALL-UNNAMED +@@ -135,6 +141,7 @@ + import java.util.concurrent.atomic.AtomicReference; + import java.util.regex.Pattern; + ++import jdk.test.lib.Platform; + import junit.framework.Test; + import junit.framework.TestCase; + import junit.framework.TestResult; +@@ -624,6 +631,13 @@ public static Test suite() { + "SynchronousQueue20Test", + "ReentrantReadWriteLock20Test" + }; ++ ++ if (Platform.isS390x()) { ++ java20TestClassNames = new String[] { ++ "ForkJoinPool20Test", ++ }; ++ } ++ + addNamedTestClasses(suite, java20TestClassNames); + } + +-- +2.53.0 diff --git a/patches/jdk-8381555.diff b/patches/jdk-8381555.diff new file mode 100644 index 000000000..eecb6c33d --- /dev/null +++ b/patches/jdk-8381555.diff @@ -0,0 +1,29 @@ +From 81b6fcc3e9e6a5a53a7a53d8371d86a2f48f3d90 Mon Sep 17 00:00:00 2001 +From: Vladimir Petko <vpetko@openjdk.org> +Date: Thu, 2 Apr 2026 13:12:48 +0000 +Subject: [PATCH] 8381555: + test/hotspot/jtreg/gc/arguments/TestG1CompressedOops.java fails on 32 bit + architectures +Origin: https://github.com/openjdk/jdk/commit/81b6fcc3e9e6a5a53a7a53d8371d86a2f48f3d90 +Bug: https://bugs.openjdk.org/browse/JDK-8381555 +Reviewed-by: jsikstro + +--- + test/hotspot/jtreg/gc/arguments/TestG1CompressedOops.java | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/test/hotspot/jtreg/gc/arguments/TestG1CompressedOops.java b/test/hotspot/jtreg/gc/arguments/TestG1CompressedOops.java +index 3aec113990c..c4c1d364308 100644 +--- a/test/hotspot/jtreg/gc/arguments/TestG1CompressedOops.java ++++ b/test/hotspot/jtreg/gc/arguments/TestG1CompressedOops.java +@@ -27,6 +27,7 @@ + /* + * @test TestG1CompressedOops + * @bug 8354145 ++ * @requires vm.bits == 64 + * @requires vm.flagless + * @summary Verify that the flag UseCompressedOops is updated properly + * @library /test/lib +-- +2.51.0 + diff --git a/patches/jdk-8385738.diff b/patches/jdk-8385738.diff new file mode 100644 index 000000000..0af637bfb --- /dev/null +++ b/patches/jdk-8385738.diff @@ -0,0 +1,160 @@ +From 2688bf7305ff323e02636bfcc37497ebd1563ab5 Mon Sep 17 00:00:00 2001 +From: Vladimir Petko <vpetko@openjdk.org> +Date: Wed, 3 Jun 2026 06:35:57 +0000 +Subject: [PATCH] 8385738: Javadoc does not produce reproducible output due to + the snippet ids + The top level type generation order is not deterministic due to the + directory listing being non-deterministic. Snippet ids are + monotonically incremented during the javadoc run. + This means that the generated snippet ids are not reproducible. + This PR changes Set to the Map so that each page uses a separate + snippet id counter. + +Bug: https://bugs.openjdk.org/browse/JDK-8385738 +Reviewed-by: nbenalla +--- + .../formats/html/taglets/SnippetTaglet.java | 8 +- + .../doclet/testSnippetTag/TestSnippetTag.java | 95 ++++++++++++++++++- + 2 files changed, 98 insertions(+), 5 deletions(-) + +--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/SnippetTaglet.java ++++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/SnippetTaglet.java +@@ -1,5 +1,5 @@ + /* +- * Copyright (c) 2020, 2025, Oracle and/or its affiliates. All rights reserved. ++ * Copyright (c) 2020, 2026, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it +@@ -49,6 +49,7 @@ + + import jdk.javadoc.doclet.Taglet; + import jdk.javadoc.internal.doclets.formats.html.HtmlConfiguration; ++import jdk.javadoc.internal.doclets.formats.html.HtmlDocletWriter; + import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyles; + import jdk.javadoc.internal.doclets.formats.html.taglets.snippet.Action; + import jdk.javadoc.internal.doclets.formats.html.taglets.snippet.ParseException; +@@ -124,7 +125,8 @@ + if (id != null && !id.isBlank()) { + pre.put(HtmlAttr.ID, id); + } else { +- pre.put(HtmlAttr.ID, config.htmlIds.forSnippet(element, ids).name()); ++ var set = ids.computeIfAbsent(tagletWriter.htmlWriter, _ -> new HashSet<>()); ++ pre.put(HtmlAttr.ID, config.htmlIds.forSnippet(element, set).name()); + } + var code = HtmlTree.CODE() + .addUnchecked(Text.EMPTY); // Make sure the element is always rendered +@@ -205,7 +207,7 @@ + return snippetContainer.add(pre.add(code)); + } + +- private final Set<String> ids = new HashSet<>(); ++ private final HashMap<HtmlDocletWriter, Set<String>> ids = new HashMap<>(); + + private static final class BadSnippetException extends Exception { + +--- a/test/langtools/jdk/javadoc/doclet/testSnippetTag/TestSnippetTag.java ++++ b/test/langtools/jdk/javadoc/doclet/testSnippetTag/TestSnippetTag.java +@@ -39,6 +39,7 @@ + import java.nio.file.Paths; + import java.nio.file.StandardOpenOption; + import java.util.ArrayList; ++import java.util.Arrays; + import java.util.List; + import java.util.Optional; + import java.util.concurrent.atomic.AtomicInteger; +@@ -2675,4 +2676,94 @@ + """); + checkNoCrashes(); + } ++ ++ @Test ++ public void testSnippetIdCounterResetsPerPage(Path base) throws IOException { ++ Path src = base.resolve("src"); ++ ++ tb.writeJavaFiles(src, ++ """ ++ package p; ++ import java.lang.annotation.Target; ++ import java.lang.annotation.ElementType; ++ @Target({ElementType.TYPE, ElementType.METHOD}) ++ public @interface ACustomAnnotation { ++ } ++ """, ++ """ ++ package p; ++ import java.lang.annotation.Target; ++ import java.lang.annotation.ElementType; ++ @Target({ElementType.TYPE, ElementType.METHOD}) ++ public @interface ZCustomAnnotation { ++ } ++ """, ++ """ ++ package p; ++ /** Class A. */ ++ public class A { ++ /** ++ * First snippet on A.foo: ++ * {@snippet : ++ * int x = 1; // first ++ * } ++ * Second snippet on A.foo: ++ * {@snippet : ++ * int y = 2; // second ++ * } ++ */ ++ @ACustomAnnotation ++ @ZCustomAnnotation ++ public void foo() {} ++ } ++ """, ++ """ ++ package p; ++ /** Class B. */ ++ public class B { ++ /** ++ * First snippet on B.foo: ++ * {@snippet : ++ * int x = 1; // first ++ * } ++ * Second snippet on B.foo: ++ * {@snippet : ++ * int y = 2; // second ++ * } ++ */ ++ @ACustomAnnotation ++ @ZCustomAnnotation ++ public void foo() {} ++ } ++ """); ++ ++ javadoc("-d", base.resolve("out").toString(), ++ "-use", ++ "-sourcepath", src.toString(), ++ "p"); ++ checkExit(Exit.OK); ++ for (String cls : new String[] { ++ "A.html", ++ "B.html", ++ "class-use/ACustomAnnotation.html", ++ "class-use/ZCustomAnnotation.html"}) { ++ var file = base ++ .resolve("out") ++ .resolve("p") ++ .resolve(cls); ++ String content = Files.readString(file); ++ for (var snippetId : new String[] {"snippet-foo()1", "snippet-foo()2"}) { ++ checking("id \"" + snippetId + "\" present in " + cls); ++ if (content.contains("id=\"" + snippetId + "\"")) { ++ passed("found"); ++ } else { ++ failed("" + snippetId + " not found in " + ++ String.join("\n", Arrays.asList(content.split("\n")) ++ .stream() ++ .filter(l -> l.contains("pre class=\"snippet\"")) ++ .toList())); ++ } ++ } ++ } ++ } + } diff --git a/patches/jdk-8387580.diff b/patches/jdk-8387580.diff new file mode 100644 index 000000000..162134f5d --- /dev/null +++ b/patches/jdk-8387580.diff @@ -0,0 +1,38 @@ +From b9ea4636bea0f6264b2c602e4203e8e604d8da6e Mon Sep 17 00:00:00 2001 +From: Vladimir Petko <vladimir.petko@canonical.com> +Date: Tue, 7 Jul 2026 09:58:32 +1200 +Subject: [PATCH] fix(TemplateTable): use float operations for fast_xaccess() + and fstore(). + This PR changes fstore and fast_xaccess operations to generate float + (4 byte) instructions on S390x. This resolves out of bound read and + writes on float that causes a segmentation fault with + Compact Object Headers enabled. +Bug: https://bugs.openjdk.org/browse/JDK-8387580 +Origin: upstream, https://github.com/openjdk/jdk/commit/978dfecb6545166aee93a8e68c9c82535b0cb3e2 + +--- + src/hotspot/cpu/s390/templateTable_s390.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/hotspot/cpu/s390/templateTable_s390.cpp b/src/hotspot/cpu/s390/templateTable_s390.cpp +index 3b0929608a38d..a73e2ccbe55c4 100644 +--- a/src/hotspot/cpu/s390/templateTable_s390.cpp ++++ b/src/hotspot/cpu/s390/templateTable_s390.cpp +@@ -1055,7 +1055,7 @@ void TemplateTable::lstore() { + void TemplateTable::fstore() { + transition(ftos, vtos); + locals_index(Z_R1_scratch); +- __ freg2mem_opt(Z_ftos, faddress(_masm, Z_R1_scratch)); ++ __ freg2mem_opt(Z_ftos, faddress(_masm, Z_R1_scratch), false); + } + + void TemplateTable::dstore() { +@@ -3504,7 +3504,7 @@ void TemplateTable::fast_xaccess(TosState state) { + __ verify_oop(Z_tos); + break; + case ftos: +- __ mem2freg_opt(Z_ftos, field); ++ __ mem2freg_opt(Z_ftos, field, false); + break; + default: + ShouldNotReachHere(); diff --git a/patches/jdk-8388170-proposed.diff b/patches/jdk-8388170-proposed.diff new file mode 100644 index 000000000..fe16afe84 --- /dev/null +++ b/patches/jdk-8388170-proposed.diff @@ -0,0 +1,304 @@ +From ea42ba233b9c228f891e0f334970f2e3adc66dae Mon Sep 17 00:00:00 2001 +From: Vladimir Petko <vladimir.petko@canonical.com> +Date: Tue, 14 Jul 2026 14:34:14 +1200 +Subject: [PATCH] fix: do not use magic number in return address functions +Bug: https://bugs.openjdk.org/browse/JDK-8388170 + +--- + src/hotspot/cpu/aarch64/aarch64.ad | 6 +-- + src/hotspot/cpu/arm/arm_32.ad | 6 +-- + src/hotspot/cpu/ppc/ppc.ad | 6 +-- + src/hotspot/cpu/riscv/riscv.ad | 6 +-- + src/hotspot/cpu/s390/s390.ad | 68 ++++++++++++++++++++++------- + src/hotspot/cpu/x86/x86.ad | 6 +-- + src/hotspot/share/opto/machnode.hpp | 8 ++-- + 7 files changed, 72 insertions(+), 34 deletions(-) + +--- a/src/hotspot/cpu/aarch64/aarch64.ad ++++ b/src/hotspot/cpu/aarch64/aarch64.ad +@@ -1628,19 +1628,19 @@ + // from the start of the call to the point where the return address + // will point. + +-int MachCallStaticJavaNode::ret_addr_offset() ++int MachCallStaticJavaNode::ret_addr_offset() const + { + // call should be a simple bl + int off = 4; + return off; + } + +-int MachCallDynamicJavaNode::ret_addr_offset() ++int MachCallDynamicJavaNode::ret_addr_offset() const + { + return 16; // movz, movk, movk, bl + } + +-int MachCallRuntimeNode::ret_addr_offset() { ++int MachCallRuntimeNode::ret_addr_offset() const { + // for generated stubs the call will be + // bl(addr) + // or with far branches +--- a/src/hotspot/cpu/ppc/ppc.ad ++++ b/src/hotspot/cpu/ppc/ppc.ad +@@ -1171,12 +1171,12 @@ + + // PPC port: Removed use of lazy constant construct. + +-int MachCallStaticJavaNode::ret_addr_offset() { ++int MachCallStaticJavaNode::ret_addr_offset() const { + // It's only a single branch-and-link instruction. + return 4; + } + +-int MachCallDynamicJavaNode::ret_addr_offset() { ++int MachCallDynamicJavaNode::ret_addr_offset() const { + // Offset is 4 with postalloc expanded calls (bl is one instruction). We use + // postalloc expanded calls if we use inline caches and do not update method data. + if (UseInlineCaches) return 4; +@@ -1191,7 +1191,7 @@ + } + } + +-int MachCallRuntimeNode::ret_addr_offset() { ++int MachCallRuntimeNode::ret_addr_offset() const { + if (rule() == CallRuntimeDirect_rule) { + // CallRuntimeDirectNode uses call_c. + #if defined(ABI_ELFv2) +--- a/src/hotspot/cpu/riscv/riscv.ad ++++ b/src/hotspot/cpu/riscv/riscv.ad +@@ -1218,17 +1218,17 @@ + // from the start of the call to the point where the return address + // will point. + +-int MachCallStaticJavaNode::ret_addr_offset() ++int MachCallStaticJavaNode::ret_addr_offset() const + { + return 3 * NativeInstruction::instruction_size; // auipc + ld + jalr + } + +-int MachCallDynamicJavaNode::ret_addr_offset() ++int MachCallDynamicJavaNode::ret_addr_offset() const + { + return NativeMovConstReg::movptr2_instruction_size + (3 * NativeInstruction::instruction_size); // movptr2, auipc + ld + jal + } + +-int MachCallRuntimeNode::ret_addr_offset() { ++int MachCallRuntimeNode::ret_addr_offset() const { + // For address inside the code cache the call will be: + // auipc + jalr + // For real runtime callouts it will be 8 instructions +--- a/src/hotspot/cpu/s390/s390.ad ++++ b/src/hotspot/cpu/s390/s390.ad +@@ -886,29 +886,62 @@ + return 0; + } + +-int MachCallStaticJavaNode::ret_addr_offset() { ++int MachCallStaticJavaNode::ret_addr_offset() const { + if (_method) { +- return 8; ++ return MacroAssembler::call_far_pcrelative_size(); ++ + } else { + return MacroAssembler::call_far_patchable_ret_addr_offset(); + } + } + +-int MachCallDynamicJavaNode::ret_addr_offset() { ++int MachCallDynamicJavaNode::ret_addr_offset() const { + // Consider size of receiver type profiling (C2 tiers). + int profile_receiver_type_size = 0; + + int vtable_index = this->_vtable_index; + if (vtable_index == -4) { +- return 14 + profile_receiver_type_size; ++ return MacroAssembler::load_const_from_toc_size() ++ + MacroAssembler::call_far_pcrelative_size() ++ + profile_receiver_type_size; + } else { + assert(!UseInlineCaches, "expect vtable calls only if not using ICs"); +- return 36 + profile_receiver_type_size; ++ // This should return the size of instructions in vtable dispatch ++ // branch of z_enc_java_dynamic_call ++ int offset = 0; ++ ++ // __ load_klass(Z_method, Z_R2); ++ if (UseCompactObjectHeaders) { ++ // load_narrow_klass_compact (z_lg z_srlg) ++ offset += 6 // z_lg ++ + 6; // z_srlg; ++ } else { ++ offset += 6; // z_llgf ++ } ++ offset += MacroAssembler::instr_size_for_decode_klass_not_null(); ++ ++ // check if displacement is valid, as it will generate different ++ // instructions: ++ int entry_offset = in_bytes(Klass::vtable_start_offset()) + ++ vtable_index * vtableEntry::size_in_bytes(); ++ int v_off = entry_offset + in_bytes(vtableEntry::method_offset()); ++ if (!Displacement::is_validDisp(v_off)) { ++ offset += MacroAssembler::load_const_size(); // it also generates load_cost ++ } ++ // both generate z_lg ++ offset += 6; // z_lg (z_method, v_off | Address(Z_method, Z_R1_scratch)) ++ // common footer ++ offset += 6; // z_lg(Z_R1_scratch, Method::from_compiled_offset()) ++ offset += 2; // z_basr ++ ++ return offset + profile_receiver_type_size; + } + } + +-int MachCallRuntimeNode::ret_addr_offset() { +- return 12 + MacroAssembler::call_far_patchable_ret_addr_offset(); ++int MachCallRuntimeNode::ret_addr_offset() const { ++ return 6 // get_PC() (LARL) ++ + 6 // save_return_pc() (STG) ++ + MacroAssembler::call_far_patchable_ret_addr_offset(); + } + + // Compute padding required for nodes which need alignment +@@ -2379,8 +2412,8 @@ + // callee doesn't. + unsigned int start_off = __ offset(); + // Compute size of "larl + stg + call_c_opt". +- const int size_of_code = 6 + 6 + MacroAssembler::call_far_patchable_size(); +- __ get_PC(Z_R14, size_of_code); ++ const int ret_off = ret_addr_offset(); ++ __ get_PC(Z_R14, ret_off); + __ save_return_pc(); + assert(__ offset() - start_off == 12, "bad prelude len: %d", __ offset() - start_off); + +@@ -2391,14 +2424,13 @@ + return; + } + +-#ifdef ASSERT +- // Plausibility check for size_of_code assumptions. +- unsigned int actual_ret_off = __ offset(); +- assert(start_off + size_of_code == actual_ret_off, "wrong return_pc"); +-#endif ++ assert(__ offset() - start_off == (uint)ret_addr_offset(), ++ "z_enc_java_to_runtime_call return offset mismatch: emitted %d bytes, ret_addr_offset()=%d", ++ __ offset() - start_off, ret_addr_offset()); + %} + + enc_class z_enc_java_static_call(method meth) %{ ++ unsigned int start_off = __ offset(); + // Call to fixup routine. Fixup routine uses ScopeDesc info to determine + // whom we intended to call. + int ret_offset = 0; +@@ -2428,6 +2460,9 @@ + } + + __ clear_inst_mark(); ++ assert(__ offset() - start_off == (uint)ret_addr_offset(), ++ "z_enc_java_static_call return offset mismatch: emitted %d bytes, ret_addr_offset()=%d", ++ __ offset() - start_off, ret_addr_offset()); + %} + + // Java dynamic call +@@ -2482,8 +2517,10 @@ + __ z_lg(Z_R1_scratch, Address(Z_method, Method::from_compiled_offset())); + // Call target. Either compiled code or C2I adapter. + __ z_basr(Z_R14, Z_R1_scratch); +- unsigned int ret_off = __ offset(); + } ++ assert(__ offset() - start_off == (uint)ret_addr_offset(), ++ "z_enc_java_dynamic_call return offset mismatch: emitted %d bytes, ret_addr_offset()=%d", ++ __ offset() - start_off, ret_addr_offset()); + %} + + enc_class z_enc_cmov_reg(cmpOp cmp, iRegI dst, iRegI src) %{ +--- a/src/hotspot/share/opto/machnode.hpp ++++ b/src/hotspot/share/opto/machnode.hpp +@@ -926,7 +926,7 @@ + virtual bool pinned() const { return false; } + virtual const Type* Value(PhaseGVN* phase) const; + virtual const RegMask &in_RegMask(uint) const; +- virtual int ret_addr_offset() { return 0; } ++ virtual int ret_addr_offset() const { return 0; } + + NOT_LP64(bool return_value_is_used() const;) + +@@ -988,7 +988,7 @@ + // If this is an uncommon trap, return the request code, else zero. + int uncommon_trap_request() const; + +- virtual int ret_addr_offset(); ++ virtual int ret_addr_offset() const; + #ifndef PRODUCT + virtual void dump_spec(outputStream *st) const; + void dump_trap_args(outputStream *st) const; +@@ -1004,7 +1004,7 @@ + init_class_id(Class_MachCallDynamicJava); + DEBUG_ONLY(_vtable_index = -99); // throw an assert if uninitialized + } +- virtual int ret_addr_offset(); ++ virtual int ret_addr_offset() const; + #ifndef PRODUCT + virtual void dump_spec(outputStream *st) const; + #endif +@@ -1022,7 +1022,7 @@ + MachCallRuntimeNode() : MachCallNode() { + init_class_id(Class_MachCallRuntime); + } +- virtual int ret_addr_offset(); ++ virtual int ret_addr_offset() const; + #ifndef PRODUCT + virtual void dump_spec(outputStream *st) const; + #endif +--- a/src/hotspot/cpu/arm/arm_32.ad ++++ b/src/hotspot/cpu/arm/arm_32.ad +@@ -430,19 +430,19 @@ + // from the start of the call to the point where the return address + // will point. + +-int MachCallStaticJavaNode::ret_addr_offset() { ++int MachCallStaticJavaNode::ret_addr_offset() const { + bool far = (_method == nullptr) ? maybe_far_call(this) : !cache_reachable(); + return ((far ? 3 : 1) + (_method_handle_invoke ? 1 : 0)) * + NativeInstruction::instruction_size; + } + +-int MachCallDynamicJavaNode::ret_addr_offset() { ++int MachCallDynamicJavaNode::ret_addr_offset() const { + bool far = !cache_reachable(); + // mov_oop is always 2 words + return (2 + (far ? 3 : 1)) * NativeInstruction::instruction_size; + } + +-int MachCallRuntimeNode::ret_addr_offset() { ++int MachCallRuntimeNode::ret_addr_offset() const { + // bl or movw; movt; blx + bool far = maybe_far_call(this); + return (far ? 3 : 1) * NativeInstruction::instruction_size; +--- a/src/hotspot/cpu/x86/x86_64.ad ++++ b/src/hotspot/cpu/x86/x86_64.ad +@@ -600,21 +600,21 @@ + // !!!!! Special hack to get all types of calls to specify the byte offset + // from the start of the call to the point where the return address + // will point. +-int MachCallStaticJavaNode::ret_addr_offset() ++int MachCallStaticJavaNode::ret_addr_offset() const + { + int offset = 5; // 5 bytes from start of call to where return address points + offset += clear_avx_size(); + return offset; + } + +-int MachCallDynamicJavaNode::ret_addr_offset() ++int MachCallDynamicJavaNode::ret_addr_offset() const + { + int offset = 15; // 15 bytes from start of call to where return address points + offset += clear_avx_size(); + return offset; + } + +-int MachCallRuntimeNode::ret_addr_offset() { ++int MachCallRuntimeNode::ret_addr_offset() const { + int offset = 13; // movq r10,#addr; callq (r10) + if (this->ideal_Opcode() != Op_CallLeafVector) { + offset += clear_avx_size(); diff --git a/patches/jdk-getAccessibleValue.diff b/patches/jdk-getAccessibleValue.diff new file mode 100644 index 000000000..c2c1b196b --- /dev/null +++ b/patches/jdk-getAccessibleValue.diff @@ -0,0 +1,208 @@ +--- a/src/java.desktop/share/classes/javax/swing/JTree.java ++++ b/src/java.desktop/share/classes/javax/swing/JTree.java +@@ -5153,7 +5153,7 @@ public class JTree extends JComponent im + public AccessibleSelection getAccessibleSelection() { + AccessibleContext ac = getCurrentAccessibleContext(); + if (ac != null && isLeaf) { +- return getCurrentAccessibleContext().getAccessibleSelection(); ++ return ac.getAccessibleSelection(); + } else { + return this; + } +@@ -5168,7 +5168,7 @@ public class JTree extends JComponent im + public AccessibleText getAccessibleText() { + AccessibleContext ac = getCurrentAccessibleContext(); + if (ac != null) { +- return getCurrentAccessibleContext().getAccessibleText(); ++ return ac.getAccessibleText(); + } else { + return null; + } +@@ -5183,7 +5183,7 @@ public class JTree extends JComponent im + public AccessibleValue getAccessibleValue() { + AccessibleContext ac = getCurrentAccessibleContext(); + if (ac != null) { +- return getCurrentAccessibleContext().getAccessibleValue(); ++ return ac.getAccessibleValue(); + } else { + return null; + } +--- a/src/java.desktop/share/classes/javax/swing/table/JTableHeader.java ++++ b/src/java.desktop/share/classes/javax/swing/table/JTableHeader.java +@@ -1130,7 +1130,12 @@ public class JTableHeader extends JCompo + } + + public AccessibleAction getAccessibleAction() { +- return getCurrentAccessibleContext().getAccessibleAction(); ++ AccessibleContext ac = getCurrentAccessibleContext(); ++ if (ac != null) { ++ return ac.getAccessibleAction(); ++ } else { ++ return null; ++ } + } + + /** +@@ -1146,15 +1151,30 @@ public class JTableHeader extends JCompo + } + + public AccessibleSelection getAccessibleSelection() { +- return getCurrentAccessibleContext().getAccessibleSelection(); ++ AccessibleContext ac = getCurrentAccessibleContext(); ++ if (ac != null) { ++ return ac.getAccessibleSelection(); ++ } else { ++ return null; ++ } + } + + public AccessibleText getAccessibleText() { +- return getCurrentAccessibleContext().getAccessibleText(); ++ AccessibleContext ac = getCurrentAccessibleContext(); ++ if (ac != null) { ++ return ac.getAccessibleText(); ++ } else { ++ return null; ++ } + } + + public AccessibleValue getAccessibleValue() { +- return getCurrentAccessibleContext().getAccessibleValue(); ++ AccessibleContext ac = getCurrentAccessibleContext(); ++ if (ac != null) { ++ return ac.getAccessibleValue(); ++ } else { ++ return null; ++ } + } + + +--- a/src/java.desktop/share/classes/javax/swing/JTable.java ++++ b/src/java.desktop/share/classes/javax/swing/JTable.java +@@ -8444,7 +8444,12 @@ public class JTable extends JComponent i + * <code>null</code> + */ + public AccessibleSelection getAccessibleSelection() { +- return getCurrentAccessibleContext().getAccessibleSelection(); ++ AccessibleContext ac = getCurrentAccessibleContext(); ++ if (ac != null) { ++ return ac.getAccessibleSelection(); ++ } else { ++ return null; ++ } + } + + /** +@@ -8454,7 +8459,12 @@ public class JTable extends JComponent i + * @return the <code>AccessibleText</code>, or <code>null</code> + */ + public AccessibleText getAccessibleText() { +- return getCurrentAccessibleContext().getAccessibleText(); ++ AccessibleContext ac = getCurrentAccessibleContext(); ++ if (ac != null) { ++ return ac.getAccessibleText(); ++ } else { ++ return null; ++ } + } + + /** +@@ -8464,7 +8474,12 @@ public class JTable extends JComponent i + * @return the <code>AccessibleValue</code>, or <code>null</code> + */ + public AccessibleValue getAccessibleValue() { +- return getCurrentAccessibleContext().getAccessibleValue(); ++ AccessibleContext ac = getCurrentAccessibleContext(); ++ if (ac != null) { ++ return ac.getAccessibleValue(); ++ } else { ++ return null; ++ } + } + + +@@ -9224,7 +9239,12 @@ public class JTable extends JComponent i + * @return the <code>AccessibleAction</code>, or <code>null</code> + */ + public AccessibleAction getAccessibleAction() { +- return getCurrentAccessibleContext().getAccessibleAction(); ++ AccessibleContext ac = getCurrentAccessibleContext(); ++ if (ac != null) { ++ return ac.getAccessibleAction(); ++ } else { ++ return null; ++ } + } + + /** +@@ -9246,7 +9266,12 @@ public class JTable extends JComponent i + * <code>null</code> + */ + public AccessibleSelection getAccessibleSelection() { +- return getCurrentAccessibleContext().getAccessibleSelection(); ++ AccessibleContext ac = getCurrentAccessibleContext(); ++ if (ac != null) { ++ return ac.getAccessibleSelection(); ++ } else { ++ return null; ++ } + } + + /** +@@ -9256,7 +9281,12 @@ public class JTable extends JComponent i + * @return the <code>AccessibleText</code>, or <code>null</code> + */ + public AccessibleText getAccessibleText() { +- return getCurrentAccessibleContext().getAccessibleText(); ++ AccessibleContext ac = getCurrentAccessibleContext(); ++ if (ac != null) { ++ return ac.getAccessibleText(); ++ } else { ++ return null; ++ } + } + + /** +@@ -9266,7 +9296,12 @@ public class JTable extends JComponent i + * @return the <code>AccessibleValue</code>, or <code>null</code> + */ + public AccessibleValue getAccessibleValue() { +- return getCurrentAccessibleContext().getAccessibleValue(); ++ AccessibleContext ac = getCurrentAccessibleContext(); ++ if (ac != null) { ++ return ac.getAccessibleValue(); ++ } else { ++ return null; ++ } + } + + +--- a/src/jdk.accessibility/windows/classes/com/sun/java/accessibility/internal/AccessBridge.java ++++ b/src/jdk.accessibility/windows/classes/com/sun/java/accessibility/internal/AccessBridge.java +@@ -6612,7 +6612,7 @@ public final class AccessBridge { + public AccessibleSelection getAccessibleSelection() { + AccessibleContext ac = getCurrentAccessibleContext(); + if (ac != null && isLeaf) { +- return getCurrentAccessibleContext().getAccessibleSelection(); ++ return ac.getAccessibleSelection(); + } else { + return this; + } +@@ -6627,7 +6627,7 @@ public final class AccessBridge { + public AccessibleText getAccessibleText() { + AccessibleContext ac = getCurrentAccessibleContext(); + if (ac != null) { +- return getCurrentAccessibleContext().getAccessibleText(); ++ return ac.getAccessibleText(); + } else { + return null; + } +@@ -6642,7 +6642,7 @@ public final class AccessBridge { + public AccessibleValue getAccessibleValue() { + AccessibleContext ac = getCurrentAccessibleContext(); + if (ac != null) { +- return getCurrentAccessibleContext().getAccessibleValue(); ++ return ac.getAccessibleValue(); + } else { + return null; + } diff --git a/patches/jdk-i18n-pt_BR.diff b/patches/jdk-i18n-pt_BR.diff new file mode 100644 index 000000000..59e24653f --- /dev/null +++ b/patches/jdk-i18n-pt_BR.diff @@ -0,0 +1,11 @@ +--- a/src/java.desktop/share/classes/sun/awt/resources/awt_pt_BR.properties ++++ b/src/java.desktop/share/classes/sun/awt/resources/awt_pt_BR.properties +@@ -38,7 +38,7 @@ + # Key names + AWT.enter=Enter + AWT.backSpace=Backspace +-AWT.tab=Guia ++AWT.tab=Tab + AWT.cancel=Cancelar + AWT.clear=Limpar + AWT.pause=Pausar diff --git a/patches/jdk-pulseaudio.diff b/patches/jdk-pulseaudio.diff new file mode 100644 index 000000000..5b758628b --- /dev/null +++ b/patches/jdk-pulseaudio.diff @@ -0,0 +1,16 @@ +--- a/src/jdk/src/java.desktop/share/conf/sound.properties ++++ b/src/jdk/src/java.desktop/share/conf/sound.properties +@@ -37,3 +37,13 @@ + # Specify the default Receiver by provider and name: + # javax.sound.midi.Receiver=com.sun.media.sound.MidiProvider#SunMIDI1 + # ++ ++javax.sound.sampled.Clip=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider ++javax.sound.sampled.Port=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider ++javax.sound.sampled.SourceDataLine=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider ++javax.sound.sampled.TargetDataLine=org.classpath.icedtea.pulseaudio.PulseAudioMixerProvider ++ ++#javax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider ++#javax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider ++#javax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider ++#javax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider diff --git a/patches/jexec.diff b/patches/jexec.diff new file mode 100644 index 000000000..47e598b99 --- /dev/null +++ b/patches/jexec.diff @@ -0,0 +1,35 @@ +--- a/src/java.base/unix/native/launcher/jexec.c ++++ b/src/java.base/unix/native/launcher/jexec.c +@@ -168,9 +168,10 @@ int main(int argc, const char * argv[]) + + /* Get the path to the java binary, which is in a known position relative + * to our current position, which is in argv[0]. */ +- if (getJavaPath(argv[argi++], java, RELATIVE_DEPTH) != 0) { ++ if (getJavaPath(JDK_BASE_DIR "/lib/jexec", java, RELATIVE_DEPTH) != 0) { + errorExit(errno, MISSING_JAVA_MSG); + } ++ argi++; + alen = (argc + 2) * (sizeof (const char *)); + if (alen <= 0 || alen > INT_MAX / sizeof(char *)) { + errorExit(errno, BAD_ARG_MSG); +--- a/make/launcher/Launcher-java.base.gmk ++++ b/make/launcher/Launcher-java.base.gmk +@@ -56,6 +56,9 @@ $(eval $(call SetupBuildLauncher, keytoo + ################################################################################ + + ifeq ($(call isTargetOs, linux), true) ++ ifeq (,$(DEBIAN_JDK_BASE_DIR)) ++ $(error DEBIAN_JDK_BASE_DIR must be defined for jexec build) ++ endif + $(eval $(call SetupJdkExecutable, BUILD_JEXEC, \ + NAME := jexec, \ + SRC := $(TOPDIR)/src/$(MODULE)/unix/native/launcher, \ +@@ -63,7 +66,7 @@ ifeq ($(call isTargetOs, linux), true) + OPTIMIZATION := LOW, \ + CFLAGS := $(CFLAGS_JDKEXE) \ + -I$(TOPDIR)/src/$(MODULE)/share/native/libjli, \ +- CFLAGS_linux := -fPIC, \ ++ CFLAGS_linux := -fPIC '-DJDK_BASE_DIR="$(DEBIAN_JDK_BASE_DIR)"', \ + CFLAGS_solaris := -KPIC, \ + LDFLAGS := $(LDFLAGS_JDKEXE), \ + OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_libs/$(MODULE), \ diff --git a/patches/jtreg-location.diff b/patches/jtreg-location.diff new file mode 100644 index 000000000..1e8bfa748 --- /dev/null +++ b/patches/jtreg-location.diff @@ -0,0 +1,51 @@ +--- a/make/autoconf/toolchain.m4 ++++ b/make/autoconf/toolchain.m4 +@@ -1027,7 +1027,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG], + AC_MSG_ERROR([jtreg home directory from --with-jtreg=$with_jtreg does not exist]) + fi + +- if test ! -e "$JT_HOME/lib/jtreg.jar"; then ++ if test ! -e "$JT_HOME/lib/jtreg.jar" && test ! -e "$JT_HOME/share/java/jtreg.jar"; then + AC_MSG_ERROR([jtreg home directory from --with-jtreg=$with_jtreg is not a valid jtreg home]) + fi + +@@ -1041,7 +1041,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG], + AC_MSG_WARN([Ignoring JT_HOME pointing to invalid directory: $JT_HOME]) + JT_HOME= + else +- if test ! -e "$JT_HOME/lib/jtreg.jar"; then ++ if test ! -e "$JT_HOME/lib/jtreg.jar" && test ! -e "$JT_HOME/share/java/jtreg.jar"; then + AC_MSG_WARN([Ignoring JT_HOME which is not a valid jtreg home: $JT_HOME]) + JT_HOME= + else +@@ -1057,7 +1057,7 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_JTREG], + if test "x$JTREGEXE" != x; then + # That's good, now try to derive JT_HOME + JT_HOME=`(cd $($DIRNAME $JTREGEXE)/.. && pwd)` +- if test ! -e "$JT_HOME/lib/jtreg.jar"; then ++ if test ! -e "$JT_HOME/lib/jtreg.jar" && test ! -e "$JT_HOME/share/java/jtreg.jar"; then + AC_MSG_WARN([Ignoring jtreg from path since a valid jtreg home cannot be found]) + JT_HOME= + else +--- a/make/RunTests.gmk ++++ b/make/RunTests.gmk +@@ -849,7 +849,7 @@ define SetupRunJtregTestBody + + $1_COMMAND_LINE := \ + $$(JAVA) $$($1_JTREG_LAUNCHER_OPTIONS) \ +- -Dprogram=jtreg -jar $$(JT_HOME)/lib/jtreg.jar \ ++ -Dprogram=jtreg -jar $$(if $$(wildcard $$(JT_HOME)/lib/jtreg.jar),$$(JT_HOME)/lib/jtreg.jar,$$(JT_HOME)/share/java/jtreg.jar) \ + $$($1_JTREG_BASIC_OPTIONS) \ + -testjdk:$$(JDK_UNDER_TEST) \ + -dir:$$(JTREG_TOPDIR) \ +--- a/make/test/BuildFailureHandler.gmk ++++ b/make/test/BuildFailureHandler.gmk +@@ -38,7 +38,7 @@ FH_BASEDIR := $(TOPDIR)/test/failure_han + FH_SUPPORT := $(SUPPORT_OUTPUTDIR)/test/failure_handler + FH_JAR := $(FH_SUPPORT)/jtregFailureHandler.jar + +-JTREG_JAR := $(JT_HOME)/lib/jtreg.jar ++JTREG_JAR := $(if $(wildcard $(JT_HOME)/lib/jtreg.jar),$(JT_HOME)/lib/jtreg.jar,$(JT_HOME)/share/java/jtreg.jar) + ifeq ($(wildcard $(JTREG_JAR)), ) + $(error Cannot build failure handler without jtreg) + endif diff --git a/patches/ldap-timeout-test-use-ip.patch b/patches/ldap-timeout-test-use-ip.patch new file mode 100644 index 000000000..8d537eaba --- /dev/null +++ b/patches/ldap-timeout-test-use-ip.patch @@ -0,0 +1,19 @@ +Description: Replace hostname with a non-existant ip address + In Ubuntu build environment we do not have DNS resolver, causing an unexpected test + failure. Use a non-existant IP address instead of hostname. +Author: Vladimir Petko <vladimir.petko@canonical.com> +Forwarded: no +Last-Update: 2023-03-27 +--- a/test/jdk/com/sun/jndi/ldap/LdapPoolTimeoutTest.java ++++ b/test/jdk/com/sun/jndi/ldap/LdapPoolTimeoutTest.java +@@ -81,7 +81,9 @@ public class LdapPoolTimeoutTest { + env.put("com.sun.jndi.ldap.read.timeout", String.valueOf(READ_MILLIS)); + env.put("com.sun.jndi.ldap.connect.timeout", String.valueOf(CONNECT_MILLIS)); + env.put("com.sun.jndi.ldap.connect.pool", "true"); +- env.put(Context.PROVIDER_URL, "ldap://example.com:1234"); ++ // there should not be a LDAP provider on multicast address, but ++ // network stack should be able to send to it ++ env.put(Context.PROVIDER_URL, "ldap://224.0.0.0:1234"); + + try { + // launch a few concurrent connection attempts diff --git a/patches/m68k-support.diff b/patches/m68k-support.diff new file mode 100644 index 000000000..b97234fab --- /dev/null +++ b/patches/m68k-support.diff @@ -0,0 +1,1083 @@ +Subject: Fix alignment issues on m68k +Author: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> +Last Update: 2019-04-29 + +--- /dev/null ++++ b/src/java.desktop/unix/data/x11wrappergen/sizes-32-linux-m68k.txt +@@ -0,0 +1,1017 @@ ++long 4 ++int 4 ++short 2 ++ptr 4 ++Bool 4 ++Atom 4 ++Window 4 ++XExtData.number 0 ++XExtData.next 4 ++XExtData.free_private 8 ++XExtData.private_data 12 ++XExtData 16 ++XIMStringConversionCallbackStruct.position 0 ++XIMStringConversionCallbackStruct.direction 2 ++XIMStringConversionCallbackStruct.operation 6 ++XIMStringConversionCallbackStruct.factor 8 ++XIMStringConversionCallbackStruct.text 10 ++XIMStringConversionCallbackStruct 14 ++XkbNewKeyboardNotifyEvent.type 0 ++XkbNewKeyboardNotifyEvent.serial 4 ++XkbNewKeyboardNotifyEvent.send_event 8 ++XkbNewKeyboardNotifyEvent.display 12 ++XkbNewKeyboardNotifyEvent.time 16 ++XkbNewKeyboardNotifyEvent.xkb_type 20 ++XkbNewKeyboardNotifyEvent.device 24 ++XkbNewKeyboardNotifyEvent.old_device 28 ++XkbNewKeyboardNotifyEvent.min_key_code 32 ++XkbNewKeyboardNotifyEvent.max_key_code 36 ++XkbNewKeyboardNotifyEvent.old_min_key_code 40 ++XkbNewKeyboardNotifyEvent.old_max_key_code 44 ++XkbNewKeyboardNotifyEvent.changed 48 ++XkbNewKeyboardNotifyEvent.req_major 52 ++XkbNewKeyboardNotifyEvent.req_minor 53 ++XkbNewKeyboardNotifyEvent 54 ++XTimeCoord.time 0 ++XTimeCoord.x 4 ++XTimeCoord.y 6 ++XTimeCoord 8 ++XkbCompatMapNotifyEvent.type 0 ++XkbCompatMapNotifyEvent.serial 4 ++XkbCompatMapNotifyEvent.send_event 8 ++XkbCompatMapNotifyEvent.display 12 ++XkbCompatMapNotifyEvent.time 16 ++XkbCompatMapNotifyEvent.xkb_type 20 ++XkbCompatMapNotifyEvent.device 24 ++XkbCompatMapNotifyEvent.changed_groups 28 ++XkbCompatMapNotifyEvent.first_si 32 ++XkbCompatMapNotifyEvent.num_si 36 ++XkbCompatMapNotifyEvent.num_total_si 40 ++XkbCompatMapNotifyEvent 44 ++XIMStatusDrawCallbackStruct.type 0 ++XIMStatusDrawCallbackStruct.data 4 ++XIMStatusDrawCallbackStruct 8 ++XKeyboardControl.key_click_percent 0 ++XKeyboardControl.bell_percent 4 ++XKeyboardControl.bell_pitch 8 ++XKeyboardControl.bell_duration 12 ++XKeyboardControl.led 16 ++XKeyboardControl.led_mode 20 ++XKeyboardControl.key 24 ++XKeyboardControl.auto_repeat_mode 28 ++XKeyboardControl 32 ++XSelectionClearEvent.type 0 ++XSelectionClearEvent.serial 4 ++XSelectionClearEvent.send_event 8 ++XSelectionClearEvent.display 12 ++XSelectionClearEvent.window 16 ++XSelectionClearEvent.selection 20 ++XSelectionClearEvent.time 24 ++XSelectionClearEvent 28 ++XWindowChanges.x 0 ++XWindowChanges.y 4 ++XWindowChanges.width 8 ++XWindowChanges.height 12 ++XWindowChanges.border_width 16 ++XWindowChanges.sibling 20 ++XWindowChanges.stack_mode 24 ++XWindowChanges 28 ++XIMPreeditCaretCallbackStruct.position 0 ++XIMPreeditCaretCallbackStruct.direction 4 ++XIMPreeditCaretCallbackStruct.style 8 ++XIMPreeditCaretCallbackStruct 12 ++XOMCharSetList.charset_count 0 ++XOMCharSetList.charset_list 4 ++XOMCharSetList 8 ++XOMFontInfo.num_font 0 ++XOMFontInfo.font_struct_list 4 ++XOMFontInfo.font_name_list 8 ++XOMFontInfo 12 ++AwtScreenData.numConfigs 0 ++AwtScreenData.root 4 ++AwtScreenData.whitepixel 8 ++AwtScreenData.blackpixel 12 ++AwtScreenData.defaultConfig 16 ++AwtScreenData.configs 20 ++AwtScreenData 24 ++XIMHotKeyTrigger.keysym 0 ++XIMHotKeyTrigger.modifier 4 ++XIMHotKeyTrigger.modifier_mask 8 ++XIMHotKeyTrigger 12 ++XCirculateEvent.type 0 ++XCirculateEvent.serial 4 ++XCirculateEvent.send_event 8 ++XCirculateEvent.display 12 ++XCirculateEvent.event 16 ++XCirculateEvent.window 20 ++XCirculateEvent.place 24 ++XCirculateEvent 28 ++Screen.ext_data 0 ++Screen.display 4 ++Screen.root 8 ++Screen.width 12 ++Screen.height 16 ++Screen.mwidth 20 ++Screen.mheight 24 ++Screen.ndepths 28 ++Screen.depths 32 ++Screen.root_depth 36 ++Screen.root_visual 40 ++Screen.default_gc 44 ++Screen.cmap 48 ++Screen.white_pixel 52 ++Screen.black_pixel 56 ++Screen.max_maps 60 ++Screen.min_maps 64 ++Screen.backing_store 68 ++Screen.save_unders 72 ++Screen.root_input_mask 76 ++Screen 80 ++XMapRequestEvent.type 0 ++XMapRequestEvent.serial 4 ++XMapRequestEvent.send_event 8 ++XMapRequestEvent.display 12 ++XMapRequestEvent.parent 16 ++XMapRequestEvent.window 20 ++XMapRequestEvent 24 ++XIMText.length 0 ++XIMText.feedback 2 ++XIMText.encoding_is_wchar 6 ++XIMText.string 10 ++XIMText 14 ++XGraphicsExposeEvent.type 0 ++XGraphicsExposeEvent.serial 4 ++XGraphicsExposeEvent.send_event 8 ++XGraphicsExposeEvent.display 12 ++XGraphicsExposeEvent.drawable 16 ++XGraphicsExposeEvent.x 20 ++XGraphicsExposeEvent.y 24 ++XGraphicsExposeEvent.width 28 ++XGraphicsExposeEvent.height 32 ++XGraphicsExposeEvent.count 36 ++XGraphicsExposeEvent.major_code 40 ++XGraphicsExposeEvent.minor_code 44 ++XGraphicsExposeEvent 48 ++XEvent.type 0 ++XEvent.xany 0 ++XEvent.xkey 0 ++XEvent.xbutton 0 ++XEvent.xmotion 0 ++XEvent.xcrossing 0 ++XEvent.xfocus 0 ++XEvent.xexpose 0 ++XEvent.xgraphicsexpose 0 ++XEvent.xnoexpose 0 ++XEvent.xvisibility 0 ++XEvent.xcreatewindow 0 ++XEvent.xdestroywindow 0 ++XEvent.xunmap 0 ++XEvent.xmap 0 ++XEvent.xmaprequest 0 ++XEvent.xreparent 0 ++XEvent.xconfigure 0 ++XEvent.xgravity 0 ++XEvent.xresizerequest 0 ++XEvent.xconfigurerequest 0 ++XEvent.xcirculate 0 ++XEvent.xcirculaterequest 0 ++XEvent.xproperty 0 ++XEvent.xselectionclear 0 ++XEvent.xselectionrequest 0 ++XEvent.xselection 0 ++XEvent.xcolormap 0 ++XEvent.xclient 0 ++XEvent.xmapping 0 ++XEvent.xerror 0 ++XEvent.xkeymap 0 ++XEvent.pad 0 ++XEvent 96 ++XRenderDirectFormat.red 0 ++XRenderDirectFormat.redMask 2 ++XRenderDirectFormat.green 4 ++XRenderDirectFormat.greenMask 6 ++XRenderDirectFormat.blue 8 ++XRenderDirectFormat.blueMask 10 ++XRenderDirectFormat.alpha 12 ++XRenderDirectFormat.alphaMask 14 ++XRenderDirectFormat 16 ++ColorData.awt_Colors 0 ++ColorData.awt_numICMcolors 4 ++ColorData.awt_icmLUT 8 ++ColorData.awt_icmLUT2Colors 12 ++ColorData.img_grays 16 ++ColorData.img_clr_tbl 20 ++ColorData.img_oda_red 24 ++ColorData.img_oda_green 28 ++ColorData.img_oda_blue 32 ++ColorData.pGrayInverseLutData 36 ++ColorData.representsPrimaries 44 ++ColorData.screendata 40 ++ColorData 48 ++XFontStruct.ext_data 0 ++XFontStruct.fid 4 ++XFontStruct.direction 8 ++XFontStruct.min_char_or_byte2 12 ++XFontStruct.max_char_or_byte2 16 ++XFontStruct.min_byte1 20 ++XFontStruct.max_byte1 24 ++XFontStruct.all_chars_exist 28 ++XFontStruct.n_properties 36 ++XFontStruct.properties 40 ++XFontStruct.min_bounds 44 ++XFontStruct.max_bounds 56 ++XFontStruct.per_char 68 ++XFontStruct.ascent 72 ++XFontStruct.descent 76 ++XFontStruct 80 ++XExtCodes.extension 0 ++XExtCodes.major_opcode 4 ++XExtCodes.first_event 8 ++XExtCodes.first_error 12 ++XExtCodes 16 ++XFontSetExtents.max_ink_extent 0 ++XFontSetExtents.max_logical_extent 8 ++XFontSetExtents 16 ++XSelectionEvent.type 0 ++XSelectionEvent.serial 4 ++XSelectionEvent.send_event 8 ++XSelectionEvent.display 12 ++XSelectionEvent.requestor 16 ++XSelectionEvent.selection 20 ++XSelectionEvent.target 24 ++XSelectionEvent.property 28 ++XSelectionEvent.time 32 ++XSelectionEvent 36 ++XArc.x 0 ++XArc.y 2 ++XArc.width 4 ++XArc.height 6 ++XArc.angle1 8 ++XArc.angle2 10 ++XArc 12 ++XErrorEvent.type 0 ++XErrorEvent.display 4 ++XErrorEvent.resourceid 8 ++XErrorEvent.serial 12 ++XErrorEvent.error_code 16 ++XErrorEvent.request_code 17 ++XErrorEvent.minor_code 18 ++XErrorEvent 20 ++XConfigureRequestEvent.type 0 ++XConfigureRequestEvent.serial 4 ++XConfigureRequestEvent.send_event 8 ++XConfigureRequestEvent.display 12 ++XConfigureRequestEvent.parent 16 ++XConfigureRequestEvent.window 20 ++XConfigureRequestEvent.x 24 ++XConfigureRequestEvent.y 28 ++XConfigureRequestEvent.width 32 ++XConfigureRequestEvent.height 36 ++XConfigureRequestEvent.border_width 40 ++XConfigureRequestEvent.above 44 ++XConfigureRequestEvent.detail 48 ++XConfigureRequestEvent.value_mask 52 ++XConfigureRequestEvent 56 ++ScreenFormat.ext_data 0 ++ScreenFormat.depth 4 ++ScreenFormat.bits_per_pixel 8 ++ScreenFormat.scanline_pad 12 ++ScreenFormat 16 ++XButtonEvent.type 0 ++XButtonEvent.serial 4 ++XButtonEvent.send_event 8 ++XButtonEvent.display 12 ++XButtonEvent.window 16 ++XButtonEvent.root 20 ++XButtonEvent.subwindow 24 ++XButtonEvent.time 28 ++XButtonEvent.x 32 ++XButtonEvent.y 36 ++XButtonEvent.x_root 40 ++XButtonEvent.y_root 44 ++XButtonEvent.state 48 ++XButtonEvent.button 52 ++XButtonEvent.same_screen 56 ++XButtonEvent 60 ++XFontProp.name 0 ++XFontProp.card32 4 ++XFontProp 8 ++XIMValuesList.count_values 0 ++XIMValuesList.supported_values 2 ++XIMValuesList 6 ++XKeymapEvent.type 0 ++XKeymapEvent.serial 4 ++XKeymapEvent.send_event 8 ++XKeymapEvent.display 12 ++XKeymapEvent.window 16 ++XKeymapEvent.key_vector 20 ++XKeymapEvent 52 ++XTextItem16.chars 0 ++XTextItem16.nchars 4 ++XTextItem16.delta 8 ++XTextItem16.font 12 ++XTextItem16 16 ++XIMPreeditDrawCallbackStruct.caret 0 ++XIMPreeditDrawCallbackStruct.chg_first 4 ++XIMPreeditDrawCallbackStruct.chg_length 8 ++XIMPreeditDrawCallbackStruct.text 12 ++XIMPreeditDrawCallbackStruct 16 ++XVisualInfo.visual 0 ++XVisualInfo.visualid 4 ++XVisualInfo.screen 8 ++XVisualInfo.depth 12 ++XVisualInfo.class 16 ++XVisualInfo.red_mask 20 ++XVisualInfo.green_mask 24 ++XVisualInfo.blue_mask 28 ++XVisualInfo.colormap_size 32 ++XVisualInfo.bits_per_rgb 36 ++XVisualInfo 40 ++XkbControlsNotifyEvent.type 0 ++XkbControlsNotifyEvent.serial 4 ++XkbControlsNotifyEvent.send_event 8 ++XkbControlsNotifyEvent.display 12 ++XkbControlsNotifyEvent.time 16 ++XkbControlsNotifyEvent.xkb_type 20 ++XkbControlsNotifyEvent.device 24 ++XkbControlsNotifyEvent.changed_ctrls 28 ++XkbControlsNotifyEvent.enabled_ctrls 32 ++XkbControlsNotifyEvent.enabled_ctrl_changes 36 ++XkbControlsNotifyEvent.num_groups 40 ++XkbControlsNotifyEvent.keycode 44 ++XkbControlsNotifyEvent.event_type 45 ++XkbControlsNotifyEvent.req_major 46 ++XkbControlsNotifyEvent.req_minor 47 ++XkbControlsNotifyEvent 48 ++PropMwmHints.flags 0 ++PropMwmHints.functions 4 ++PropMwmHints.decorations 8 ++PropMwmHints.inputMode 12 ++PropMwmHints.status 16 ++PropMwmHints 20 ++XClientMessageEvent.type 0 ++XClientMessageEvent.serial 4 ++XClientMessageEvent.send_event 8 ++XClientMessageEvent.display 12 ++XClientMessageEvent.window 16 ++XClientMessageEvent.message_type 20 ++XClientMessageEvent.format 24 ++XClientMessageEvent.data 28 ++XClientMessageEvent 48 ++XAnyEvent.type 0 ++XAnyEvent.serial 4 ++XAnyEvent.send_event 8 ++XAnyEvent.display 12 ++XAnyEvent.window 16 ++XAnyEvent 20 ++XkbIndicatorNotifyEvent.type 0 ++XkbIndicatorNotifyEvent.serial 4 ++XkbIndicatorNotifyEvent.send_event 8 ++XkbIndicatorNotifyEvent.display 12 ++XkbIndicatorNotifyEvent.time 16 ++XkbIndicatorNotifyEvent.xkb_type 20 ++XkbIndicatorNotifyEvent.device 24 ++XkbIndicatorNotifyEvent.changed 28 ++XkbIndicatorNotifyEvent.state 32 ++XkbIndicatorNotifyEvent 36 ++XIMPreeditStateNotifyCallbackStruct.state 0 ++XIMPreeditStateNotifyCallbackStruct 4 ++XkbAnyEvent.type 0 ++XkbAnyEvent.serial 4 ++XkbAnyEvent.send_event 8 ++XkbAnyEvent.display 12 ++XkbAnyEvent.time 16 ++XkbAnyEvent.xkb_type 20 ++XkbAnyEvent.device 24 ++XkbAnyEvent 28 ++XMotionEvent.type 0 ++XMotionEvent.serial 4 ++XMotionEvent.send_event 8 ++XMotionEvent.display 12 ++XMotionEvent.window 16 ++XMotionEvent.root 20 ++XMotionEvent.subwindow 24 ++XMotionEvent.time 28 ++XMotionEvent.x 32 ++XMotionEvent.y 36 ++XMotionEvent.x_root 40 ++XMotionEvent.y_root 44 ++XMotionEvent.state 48 ++XMotionEvent.is_hint 52 ++XMotionEvent.same_screen 54 ++XMotionEvent 58 ++XIMHotKeyTriggers.num_hot_key 0 ++XIMHotKeyTriggers.key 4 ++XIMHotKeyTriggers 8 ++XIMStyles.count_styles 0 ++XIMStyles.supported_styles 2 ++XIMStyles 6 ++XkbExtensionDeviceNotifyEvent.type 0 ++XkbExtensionDeviceNotifyEvent.serial 4 ++XkbExtensionDeviceNotifyEvent.send_event 8 ++XkbExtensionDeviceNotifyEvent.display 12 ++XkbExtensionDeviceNotifyEvent.time 16 ++XkbExtensionDeviceNotifyEvent.xkb_type 20 ++XkbExtensionDeviceNotifyEvent.device 24 ++XkbExtensionDeviceNotifyEvent.reason 28 ++XkbExtensionDeviceNotifyEvent.supported 32 ++XkbExtensionDeviceNotifyEvent.unsupported 36 ++XkbExtensionDeviceNotifyEvent.first_btn 40 ++XkbExtensionDeviceNotifyEvent.num_btns 44 ++XkbExtensionDeviceNotifyEvent.leds_defined 48 ++XkbExtensionDeviceNotifyEvent.led_state 52 ++XkbExtensionDeviceNotifyEvent.led_class 56 ++XkbExtensionDeviceNotifyEvent.led_id 60 ++XkbExtensionDeviceNotifyEvent 64 ++XwcTextItem.chars 0 ++XwcTextItem.nchars 4 ++XwcTextItem.delta 8 ++XwcTextItem.font_set 12 ++XwcTextItem 16 ++XClassHint.res_name 0 ++XClassHint.res_class 4 ++XClassHint 8 ++XChar2b.byte1 0 ++XChar2b.byte2 1 ++XChar2b 2 ++XSetWindowAttributes.background_pixmap 0 ++XSetWindowAttributes.background_pixel 4 ++XSetWindowAttributes.border_pixmap 8 ++XSetWindowAttributes.border_pixel 12 ++XSetWindowAttributes.bit_gravity 16 ++XSetWindowAttributes.win_gravity 20 ++XSetWindowAttributes.backing_store 24 ++XSetWindowAttributes.backing_planes 28 ++XSetWindowAttributes.backing_pixel 32 ++XSetWindowAttributes.save_under 36 ++XSetWindowAttributes.event_mask 40 ++XSetWindowAttributes.do_not_propagate_mask 44 ++XSetWindowAttributes.override_redirect 48 ++XSetWindowAttributes.colormap 52 ++XSetWindowAttributes.cursor 56 ++XSetWindowAttributes 60 ++XRenderPictFormat.id 0 ++XRenderPictFormat.type 4 ++XRenderPictFormat.depth 8 ++XRenderPictFormat.direct 12 ++XRenderPictFormat.colormap 28 ++XRenderPictFormat 32 ++XReparentEvent.type 0 ++XReparentEvent.serial 4 ++XReparentEvent.send_event 8 ++XReparentEvent.display 12 ++XReparentEvent.event 16 ++XReparentEvent.window 20 ++XReparentEvent.parent 24 ++XReparentEvent.x 28 ++XReparentEvent.y 32 ++XReparentEvent.override_redirect 36 ++XReparentEvent 40 ++XCirculateRequestEvent.type 0 ++XCirculateRequestEvent.serial 4 ++XCirculateRequestEvent.send_event 8 ++XCirculateRequestEvent.display 12 ++XCirculateRequestEvent.parent 16 ++XCirculateRequestEvent.window 20 ++XCirculateRequestEvent.place 24 ++XCirculateRequestEvent 28 ++XImage.width 0 ++XImage.height 4 ++XImage.xoffset 8 ++XImage.format 12 ++XImage.data 16 ++XImage.byte_order 20 ++XImage.bitmap_unit 24 ++XImage.bitmap_bit_order 28 ++XImage.bitmap_pad 32 ++XImage.depth 36 ++XImage.bytes_per_line 40 ++XImage.bits_per_pixel 44 ++XImage.red_mask 48 ++XImage.green_mask 52 ++XImage.blue_mask 56 ++XImage.obdata 60 ++XImage.f.create_image 64 ++XImage.f.destroy_image 68 ++XImage.f.get_pixel 72 ++XImage.f.put_pixel 76 ++XImage.f.sub_image 80 ++XImage.f.add_pixel 84 ++XImage 88 ++XKeyEvent.type 0 ++XKeyEvent.serial 4 ++XKeyEvent.send_event 8 ++XKeyEvent.display 12 ++XKeyEvent.window 16 ++XKeyEvent.root 20 ++XKeyEvent.subwindow 24 ++XKeyEvent.time 28 ++XKeyEvent.x 32 ++XKeyEvent.y 36 ++XKeyEvent.x_root 40 ++XKeyEvent.y_root 44 ++XKeyEvent.state 48 ++XKeyEvent.keycode 52 ++XKeyEvent.same_screen 56 ++XKeyEvent 60 ++XkbActionMessageEvent.type 0 ++XkbActionMessageEvent.serial 4 ++XkbActionMessageEvent.send_event 8 ++XkbActionMessageEvent.display 12 ++XkbActionMessageEvent.time 16 ++XkbActionMessageEvent.xkb_type 20 ++XkbActionMessageEvent.device 24 ++XkbActionMessageEvent.keycode 28 ++XkbActionMessageEvent.press 30 ++XkbActionMessageEvent.key_event_follows 34 ++XkbActionMessageEvent.group 38 ++XkbActionMessageEvent.mods 42 ++XkbActionMessageEvent.message 46 ++XkbActionMessageEvent 54 ++XdbeSwapInfo.swap_window 0 ++XdbeSwapInfo.swap_action 4 ++XdbeSwapInfo 6 ++XTextItem.chars 0 ++XTextItem.nchars 4 ++XTextItem.delta 8 ++XTextItem.font 12 ++XTextItem 16 ++XModifierKeymap.max_keypermod 0 ++XModifierKeymap.modifiermap 4 ++XModifierKeymap 8 ++XCharStruct.lbearing 0 ++XCharStruct.rbearing 2 ++XCharStruct.width 4 ++XCharStruct.ascent 6 ++XCharStruct.descent 8 ++XCharStruct.attributes 10 ++XCharStruct 12 ++XGravityEvent.type 0 ++XGravityEvent.serial 4 ++XGravityEvent.send_event 8 ++XGravityEvent.display 12 ++XGravityEvent.event 16 ++XGravityEvent.window 20 ++XGravityEvent.x 24 ++XGravityEvent.y 28 ++XGravityEvent 32 ++Visual.ext_data 0 ++Visual.visualid 4 ++Visual.class 8 ++Visual.red_mask 12 ++Visual.green_mask 16 ++Visual.blue_mask 20 ++Visual.bits_per_rgb 24 ++Visual.map_entries 28 ++Visual 32 ++XOMOrientation.num_orientation 0 ++XOMOrientation.orientation 4 ++XOMOrientation 8 ++XkbAccessXNotifyEvent.type 0 ++XkbAccessXNotifyEvent.serial 4 ++XkbAccessXNotifyEvent.send_event 8 ++XkbAccessXNotifyEvent.display 12 ++XkbAccessXNotifyEvent.time 16 ++XkbAccessXNotifyEvent.xkb_type 20 ++XkbAccessXNotifyEvent.device 24 ++XkbAccessXNotifyEvent.detail 28 ++XkbAccessXNotifyEvent.keycode 32 ++XkbAccessXNotifyEvent.sk_delay 36 ++XkbAccessXNotifyEvent.debounce_delay 40 ++XkbAccessXNotifyEvent 44 ++XWindowAttributes.x 0 ++XWindowAttributes.y 4 ++XWindowAttributes.width 8 ++XWindowAttributes.height 12 ++XWindowAttributes.border_width 16 ++XWindowAttributes.depth 20 ++XWindowAttributes.visual 24 ++XWindowAttributes.root 28 ++XWindowAttributes.class 32 ++XWindowAttributes.bit_gravity 36 ++XWindowAttributes.win_gravity 40 ++XWindowAttributes.backing_store 44 ++XWindowAttributes.backing_planes 48 ++XWindowAttributes.backing_pixel 52 ++XWindowAttributes.save_under 56 ++XWindowAttributes.colormap 60 ++XWindowAttributes.map_installed 64 ++XWindowAttributes.map_state 68 ++XWindowAttributes.all_event_masks 72 ++XWindowAttributes.your_event_mask 76 ++XWindowAttributes.do_not_propagate_mask 80 ++XWindowAttributes.override_redirect 84 ++XWindowAttributes.screen 88 ++XWindowAttributes 92 ++XmbTextItem.chars 0 ++XmbTextItem.nchars 4 ++XmbTextItem.delta 8 ++XmbTextItem.font_set 12 ++XmbTextItem 16 ++XMappingEvent.type 0 ++XMappingEvent.serial 4 ++XMappingEvent.send_event 8 ++XMappingEvent.display 12 ++XMappingEvent.window 16 ++XMappingEvent.request 20 ++XMappingEvent.first_keycode 24 ++XMappingEvent.count 28 ++XMappingEvent 32 ++XSizeHints.flags 0 ++XSizeHints.x 4 ++XSizeHints.y 8 ++XSizeHints.width 12 ++XSizeHints.height 16 ++XSizeHints.min_width 20 ++XSizeHints.min_height 24 ++XSizeHints.max_width 28 ++XSizeHints.max_height 32 ++XSizeHints.width_inc 36 ++XSizeHints.height_inc 40 ++XSizeHints.min_aspect.x 44 ++XSizeHints.min_aspect.y 48 ++XSizeHints.max_aspect.x 52 ++XSizeHints.max_aspect.y 56 ++XSizeHints.base_width 60 ++XSizeHints.base_height 64 ++XSizeHints.win_gravity 68 ++XSizeHints 72 ++XUnmapEvent.type 0 ++XUnmapEvent.serial 4 ++XUnmapEvent.send_event 8 ++XUnmapEvent.display 12 ++XUnmapEvent.event 16 ++XUnmapEvent.window 20 ++XUnmapEvent.from_configure 24 ++XUnmapEvent 28 ++awtImageData.Depth 0 ++awtImageData.wsImageFormat 4 ++awtImageData.clrdata 16 ++awtImageData.convert 48 ++awtImageData 304 ++XkbStateNotifyEvent.type 0 ++XkbStateNotifyEvent.serial 4 ++XkbStateNotifyEvent.send_event 8 ++XkbStateNotifyEvent.display 12 ++XkbStateNotifyEvent.time 16 ++XkbStateNotifyEvent.xkb_type 20 ++XkbStateNotifyEvent.device 24 ++XkbStateNotifyEvent.changed 28 ++XkbStateNotifyEvent.group 32 ++XkbStateNotifyEvent.base_group 36 ++XkbStateNotifyEvent.latched_group 40 ++XkbStateNotifyEvent.locked_group 44 ++XkbStateNotifyEvent.mods 48 ++XkbStateNotifyEvent.base_mods 52 ++XkbStateNotifyEvent.latched_mods 56 ++XkbStateNotifyEvent.locked_mods 60 ++XkbStateNotifyEvent.compat_state 64 ++XkbStateNotifyEvent.grab_mods 68 ++XkbStateNotifyEvent.compat_grab_mods 69 ++XkbStateNotifyEvent.lookup_mods 70 ++XkbStateNotifyEvent.compat_lookup_mods 71 ++XkbStateNotifyEvent.ptr_buttons 72 ++XkbStateNotifyEvent.keycode 76 ++XkbStateNotifyEvent.event_type 77 ++XkbStateNotifyEvent.req_major 78 ++XkbStateNotifyEvent.req_minor 79 ++XkbStateNotifyEvent 80 ++XExposeEvent.type 0 ++XExposeEvent.serial 4 ++XExposeEvent.send_event 8 ++XExposeEvent.display 12 ++XExposeEvent.window 16 ++XExposeEvent.x 20 ++XExposeEvent.y 24 ++XExposeEvent.width 28 ++XExposeEvent.height 32 ++XExposeEvent.count 36 ++XExposeEvent 40 ++XkbMapNotifyEvent.type 0 ++XkbMapNotifyEvent.serial 4 ++XkbMapNotifyEvent.send_event 8 ++XkbMapNotifyEvent.display 12 ++XkbMapNotifyEvent.time 16 ++XkbMapNotifyEvent.xkb_type 20 ++XkbMapNotifyEvent.device 24 ++XkbMapNotifyEvent.changed 28 ++XkbMapNotifyEvent.flags 32 ++XkbMapNotifyEvent.first_type 36 ++XkbMapNotifyEvent.num_types 40 ++XkbMapNotifyEvent.min_key_code 44 ++XkbMapNotifyEvent.max_key_code 45 ++XkbMapNotifyEvent.first_key_sym 46 ++XkbMapNotifyEvent.first_key_act 47 ++XkbMapNotifyEvent.first_key_behavior 48 ++XkbMapNotifyEvent.first_key_explicit 49 ++XkbMapNotifyEvent.first_modmap_key 50 ++XkbMapNotifyEvent.first_vmodmap_key 51 ++XkbMapNotifyEvent.num_key_syms 52 ++XkbMapNotifyEvent.num_key_acts 56 ++XkbMapNotifyEvent.num_key_behaviors 60 ++XkbMapNotifyEvent.num_key_explicit 64 ++XkbMapNotifyEvent.num_modmap_keys 68 ++XkbMapNotifyEvent.num_vmodmap_keys 72 ++XkbMapNotifyEvent.vmods 76 ++XkbMapNotifyEvent 80 ++XGCValues.function 0 ++XGCValues.plane_mask 4 ++XGCValues.foreground 8 ++XGCValues.background 12 ++XGCValues.line_width 16 ++XGCValues.line_style 20 ++XGCValues.cap_style 24 ++XGCValues.join_style 28 ++XGCValues.fill_style 32 ++XGCValues.fill_rule 36 ++XGCValues.arc_mode 40 ++XGCValues.tile 44 ++XGCValues.stipple 48 ++XGCValues.ts_x_origin 52 ++XGCValues.ts_y_origin 56 ++XGCValues.font 60 ++XGCValues.subwindow_mode 64 ++XGCValues.graphics_exposures 68 ++XGCValues.clip_x_origin 72 ++XGCValues.clip_y_origin 76 ++XGCValues.clip_mask 80 ++XGCValues.dash_offset 84 ++XGCValues.dashes 88 ++XGCValues 90 ++XFocusChangeEvent.type 0 ++XFocusChangeEvent.serial 4 ++XFocusChangeEvent.send_event 8 ++XFocusChangeEvent.display 12 ++XFocusChangeEvent.window 16 ++XFocusChangeEvent.mode 20 ++XFocusChangeEvent.detail 24 ++XFocusChangeEvent 28 ++XPixmapFormatValues.depth 0 ++XPixmapFormatValues.bits_per_pixel 4 ++XPixmapFormatValues.scanline_pad 8 ++XPixmapFormatValues 12 ++XMapEvent.type 0 ++XMapEvent.serial 4 ++XMapEvent.send_event 8 ++XMapEvent.display 12 ++XMapEvent.event 16 ++XMapEvent.window 20 ++XMapEvent.override_redirect 24 ++XMapEvent 28 ++XkbBellNotifyEvent.type 0 ++XkbBellNotifyEvent.serial 4 ++XkbBellNotifyEvent.send_event 8 ++XkbBellNotifyEvent.display 12 ++XkbBellNotifyEvent.time 16 ++XkbBellNotifyEvent.xkb_type 20 ++XkbBellNotifyEvent.device 24 ++XkbBellNotifyEvent.percent 28 ++XkbBellNotifyEvent.pitch 32 ++XkbBellNotifyEvent.duration 36 ++XkbBellNotifyEvent.bell_class 40 ++XkbBellNotifyEvent.bell_id 44 ++XkbBellNotifyEvent.name 48 ++XkbBellNotifyEvent.window 52 ++XkbBellNotifyEvent.event_only 56 ++XkbBellNotifyEvent 60 ++XIMStringConversionText.length 0 ++XIMStringConversionText.feedback 2 ++XIMStringConversionText.encoding_is_wchar 6 ++XIMStringConversionText.string 10 ++XIMStringConversionText 14 ++XKeyboardState.key_click_percent 0 ++XKeyboardState.bell_percent 4 ++XKeyboardState.bell_pitch 8 ++XKeyboardState.bell_duration 12 ++XKeyboardState.led_mask 16 ++XKeyboardState.global_auto_repeat 20 ++XKeyboardState.auto_repeats 24 ++XKeyboardState 56 ++XkbEvent.type 0 ++XkbEvent.any 0 ++XkbEvent.new_kbd 0 ++XkbEvent.map 0 ++XkbEvent.state 0 ++XkbEvent.ctrls 0 ++XkbEvent.indicators 0 ++XkbEvent.names 0 ++XkbEvent.compat 0 ++XkbEvent.bell 0 ++XkbEvent.message 0 ++XkbEvent.accessx 0 ++XkbEvent.device 0 ++XkbEvent.core 0 ++XkbEvent 96 ++XPoint.x 0 ++XPoint.y 2 ++XPoint 4 ++XSegment.x1 0 ++XSegment.y1 2 ++XSegment.x2 4 ++XSegment.y2 6 ++XSegment 8 ++XIconSize.min_width 0 ++XIconSize.min_height 4 ++XIconSize.max_width 8 ++XIconSize.max_height 12 ++XIconSize.width_inc 16 ++XIconSize.height_inc 20 ++XIconSize 24 ++XIMCallback.client_data 0 ++XIMCallback.callback 4 ++XIMCallback 8 ++XConfigureEvent.type 0 ++XConfigureEvent.serial 4 ++XConfigureEvent.send_event 8 ++XConfigureEvent.display 12 ++XConfigureEvent.event 16 ++XConfigureEvent.window 20 ++XConfigureEvent.x 24 ++XConfigureEvent.y 28 ++XConfigureEvent.width 32 ++XConfigureEvent.height 36 ++XConfigureEvent.border_width 40 ++XConfigureEvent.above 44 ++XConfigureEvent.override_redirect 48 ++XConfigureEvent 52 ++XRectangle.x 0 ++XRectangle.y 2 ++XRectangle.width 4 ++XRectangle.height 6 ++XRectangle 8 ++XkbNamesNotifyEvent.type 0 ++XkbNamesNotifyEvent.serial 4 ++XkbNamesNotifyEvent.send_event 8 ++XkbNamesNotifyEvent.display 12 ++XkbNamesNotifyEvent.time 16 ++XkbNamesNotifyEvent.xkb_type 20 ++XkbNamesNotifyEvent.device 24 ++XkbNamesNotifyEvent.changed 28 ++XkbNamesNotifyEvent.first_type 32 ++XkbNamesNotifyEvent.num_types 36 ++XkbNamesNotifyEvent.first_lvl 40 ++XkbNamesNotifyEvent.num_lvls 44 ++XkbNamesNotifyEvent.num_aliases 48 ++XkbNamesNotifyEvent.num_radio_groups 52 ++XkbNamesNotifyEvent.changed_vmods 56 ++XkbNamesNotifyEvent.changed_groups 60 ++XkbNamesNotifyEvent.changed_indicators 64 ++XkbNamesNotifyEvent.first_key 68 ++XkbNamesNotifyEvent.num_keys 72 ++XkbNamesNotifyEvent 76 ++XCreateWindowEvent.type 0 ++XCreateWindowEvent.serial 4 ++XCreateWindowEvent.send_event 8 ++XCreateWindowEvent.display 12 ++XCreateWindowEvent.parent 16 ++XCreateWindowEvent.window 20 ++XCreateWindowEvent.x 24 ++XCreateWindowEvent.y 28 ++XCreateWindowEvent.width 32 ++XCreateWindowEvent.height 36 ++XCreateWindowEvent.border_width 40 ++XCreateWindowEvent.override_redirect 44 ++XCreateWindowEvent 48 ++XVisibilityEvent.type 0 ++XVisibilityEvent.serial 4 ++XVisibilityEvent.send_event 8 ++XVisibilityEvent.display 12 ++XVisibilityEvent.window 16 ++XVisibilityEvent.state 20 ++XVisibilityEvent 24 ++XWMHints.flags 0 ++XWMHints.initial_state 8 ++XWMHints.icon_pixmap 12 ++XWMHints.icon_window 16 ++XWMHints.icon_x 20 ++XWMHints.icon_y 24 ++XWMHints.icon_mask 28 ++XWMHints.input 4 ++XWMHints.window_group 32 ++XWMHints 36 ++XCrossingEvent.type 0 ++XCrossingEvent.serial 4 ++XCrossingEvent.send_event 8 ++XCrossingEvent.display 12 ++XCrossingEvent.window 16 ++XCrossingEvent.root 20 ++XCrossingEvent.subwindow 24 ++XCrossingEvent.time 28 ++XCrossingEvent.x 32 ++XCrossingEvent.y 36 ++XCrossingEvent.x_root 40 ++XCrossingEvent.y_root 44 ++XCrossingEvent.mode 48 ++XCrossingEvent.detail 52 ++XCrossingEvent.same_screen 56 ++XCrossingEvent.focus 60 ++XCrossingEvent.state 64 ++XCrossingEvent 68 ++XSelectionRequestEvent.type 0 ++XSelectionRequestEvent.serial 4 ++XSelectionRequestEvent.send_event 8 ++XSelectionRequestEvent.display 12 ++XSelectionRequestEvent.owner 16 ++XSelectionRequestEvent.requestor 20 ++XSelectionRequestEvent.selection 24 ++XSelectionRequestEvent.target 28 ++XSelectionRequestEvent.property 32 ++XSelectionRequestEvent.time 36 ++XSelectionRequestEvent 40 ++XNoExposeEvent.type 0 ++XNoExposeEvent.serial 4 ++XNoExposeEvent.send_event 8 ++XNoExposeEvent.display 12 ++XNoExposeEvent.drawable 16 ++XNoExposeEvent.major_code 20 ++XNoExposeEvent.minor_code 24 ++XNoExposeEvent 28 ++XHostAddress.family 0 ++XHostAddress.length 4 ++XHostAddress.address 8 ++XHostAddress 12 ++XColormapEvent.type 0 ++XColormapEvent.serial 4 ++XColormapEvent.send_event 8 ++XColormapEvent.display 12 ++XColormapEvent.window 16 ++XColormapEvent.colormap 20 ++XColormapEvent.new 24 ++XColormapEvent.state 28 ++XColormapEvent 32 ++ColorEntry.r 0 ++ColorEntry.g 1 ++ColorEntry.b 2 ++ColorEntry.flags 3 ++ColorEntry 4 ++XResizeRequestEvent.type 0 ++XResizeRequestEvent.serial 4 ++XResizeRequestEvent.send_event 8 ++XResizeRequestEvent.display 12 ++XResizeRequestEvent.window 16 ++XResizeRequestEvent.width 20 ++XResizeRequestEvent.height 24 ++XResizeRequestEvent 28 ++Depth.depth 0 ++Depth.nvisuals 4 ++Depth.visuals 8 ++Depth 12 ++XPropertyEvent.type 0 ++XPropertyEvent.serial 4 ++XPropertyEvent.send_event 8 ++XPropertyEvent.display 12 ++XPropertyEvent.window 16 ++XPropertyEvent.atom 20 ++XPropertyEvent.time 24 ++XPropertyEvent.state 28 ++XPropertyEvent 32 ++XDestroyWindowEvent.type 0 ++XDestroyWindowEvent.serial 4 ++XDestroyWindowEvent.send_event 8 ++XDestroyWindowEvent.display 12 ++XDestroyWindowEvent.event 16 ++XDestroyWindowEvent.window 20 ++XDestroyWindowEvent 24 ++XStandardColormap.colormap 0 ++XStandardColormap.red_max 4 ++XStandardColormap.red_mult 8 ++XStandardColormap.green_max 12 ++XStandardColormap.green_mult 16 ++XStandardColormap.blue_max 20 ++XStandardColormap.blue_mult 24 ++XStandardColormap.base_pixel 28 ++XStandardColormap.visualid 32 ++XStandardColormap.killid 36 ++XStandardColormap 40 ++XComposeStatus.compose_ptr 0 ++XComposeStatus.chars_matched 4 ++XComposeStatus 8 ++AwtGraphicsConfigData.awt_depth 0 ++AwtGraphicsConfigData.awt_cmap 4 ++AwtGraphicsConfigData.awt_visInfo 8 ++AwtGraphicsConfigData.awt_num_colors 48 ++AwtGraphicsConfigData.awtImage 52 ++AwtGraphicsConfigData.AwtColorMatch 56 ++AwtGraphicsConfigData.monoImage 60 ++AwtGraphicsConfigData.monoPixmap 64 ++AwtGraphicsConfigData.monoPixmapWidth 68 ++AwtGraphicsConfigData.monoPixmapHeight 72 ++AwtGraphicsConfigData.monoPixmapGC 76 ++AwtGraphicsConfigData.pixelStride 80 ++AwtGraphicsConfigData.color_data 84 ++AwtGraphicsConfigData.glxInfo 88 ++AwtGraphicsConfigData.isTranslucencySupported 92 ++AwtGraphicsConfigData.renderPictFormat 96 ++AwtGraphicsConfigData 128 ++XColor.pixel 0 ++XColor.red 4 ++XColor.green 6 ++XColor.blue 8 ++XColor.flags 10 ++XColor.pad 11 ++XColor 12 ++XTextProperty.value 0 ++XTextProperty.encoding 4 ++XTextProperty.format 8 ++XTextProperty.nitems 12 ++XTextProperty 16 +--- a/make/modules/java.desktop/gensrc/GensrcX11Wrappers.gmk ++++ b/make/modules/java.desktop/gensrc/GensrcX11Wrappers.gmk +@@ -34,9 +34,14 @@ ifeq ($(INCLUDE), true) + # Put the generated Java classes used to interface X11 from awt here. + GENSRC_X11WRAPPERS_OUTPUTDIR := $(SUPPORT_OUTPUTDIR)/gensrc/java.desktop/sun/awt/X11 + ++GENSRC_X11_VERSION_VARIANT := ++ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU), linux-m68k) ++ GENSRC_X11_VERSION_VARIANT := -linux-m68k ++endif ++ + # The pre-calculated offset file are stored here: + GENSRC_X11WRAPPERS_DATADIR := $(MODULE_SRC)/unix/data/x11wrappergen +-GENSRC_X11WRAPPERS_DATA := $(GENSRC_X11WRAPPERS_DATADIR)/sizes-$(OPENJDK_TARGET_CPU_BITS).txt ++GENSRC_X11WRAPPERS_DATA := $(GENSRC_X11WRAPPERS_DATADIR)/sizes-$(OPENJDK_TARGET_CPU_BITS)$(GENSRC_X11_VERSION_VARIANT).txt + + # Run the tool on the offset files to generate several Java classes used in awt. + $(eval $(call SetupExecute, gen_x11wrappers, \ +--- a/src/hotspot/share/memory/allocation.hpp ++++ b/src/hotspot/share/memory/allocation.hpp +@@ -365,7 +365,7 @@ class MetaspaceObj { + // that should be read-only by default. See symbol.hpp for an example. This function + // is used by the templates in metaspaceClosure.hpp + static bool is_read_only_by_default() { return false; } +-}; ++} __attribute__ ((aligned (4))); + + // Base class for classes that constitute name spaces. + +@@ -476,7 +476,7 @@ protected: + void print() const; + virtual void print_on(outputStream* st) const; + #endif // PRODUCT +-}; ++} __attribute__ ((aligned (4))); + + // One of the following macros must be used when allocating an array + // or object to determine whether it should reside in the C heap on in +--- a/src/hotspot/share/oops/constMethod.hpp ++++ b/src/hotspot/share/oops/constMethod.hpp +@@ -495,6 +495,6 @@ private: + + // Verify + void verify_on(outputStream* st); +-}; ++} __attribute__ ((aligned (4))); + + #endif // SHARE_OOPS_CONSTMETHOD_HPP +--- a/src/hotspot/share/oops/oop.hpp ++++ b/src/hotspot/share/oops/oop.hpp +@@ -349,7 +349,7 @@ class oopDesc { + + // for error reporting + static void* load_oop_raw(oop obj, int offset); +-}; ++} __attribute__ ((aligned (4))); + + // An oopDesc is not initialized via a constructor. Space is allocated in + // the Java heap, and static functions provided here on HeapWord* are used diff --git a/patches/machine-flag.diff b/patches/machine-flag.diff new file mode 100644 index 000000000..eb3fdb35c --- /dev/null +++ b/patches/machine-flag.diff @@ -0,0 +1,24 @@ +--- a/make/autoconf/flags.m4 ++++ b/make/autoconf/flags.m4 +@@ -276,6 +276,7 @@ AC_DEFUN_ONCE([FLAGS_PRE_TOOLCHAIN], + test "x$OPENJDK_TARGET_CPU_ARCH" = xppc; then + MACHINE_FLAG="-m${OPENJDK_TARGET_CPU_BITS}" + fi ++ case "$host" in *x32) MACHINE_FLAG=;; esac + fi + + if test "x$OPENJDK_TARGET_OS" = xmacosx; then +@@ -359,11 +360,8 @@ AC_DEFUN([FLAGS_SETUP_TOOLCHAIN_CONTROL] + AC_SUBST(COMPILER_COMMAND_FILE_FLAG) + AC_SUBST(COMPILER_BINDCMD_FILE_FLAG) + +- # Check that the compiler supports -mX (or -qX on AIX) flags +- # Set COMPILER_SUPPORTS_TARGET_BITS_FLAG to 'true' if it does +- FLAGS_COMPILER_CHECK_ARGUMENTS(ARGUMENT: [${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}], +- IF_TRUE: [COMPILER_SUPPORTS_TARGET_BITS_FLAG=true], +- IF_FALSE: [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false]) ++ # Don't run the -mX check and set this always to false, or else x32 gets passed -m32 ++ COMPILER_SUPPORTS_TARGET_BITS_FLAG=false + AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG) + + if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then diff --git a/patches/make-debug-print.diff b/patches/make-debug-print.diff new file mode 100644 index 000000000..f05365f67 --- /dev/null +++ b/patches/make-debug-print.diff @@ -0,0 +1,10 @@ +--- a/make/Main.gmk ++++ b/make/Main.gmk +@@ -1367,6 +1367,7 @@ ALL_TARGETS += default jdk images docs b + + # Aliases used for running tests. + ++$(call PrintVar, ALL_NAMED_TESTS) + # Let "run-test" be an alias for "test" + $(foreach t, $(ALL_NAMED_TESTS), $(eval run-test-$t: test-$t)) + RUN_TEST_TARGETS := $(addprefix run-test-, $(ALL_NAMED_TESTS)) diff --git a/patches/mips.diff b/patches/mips.diff new file mode 100644 index 000000000..24771b35a --- /dev/null +++ b/patches/mips.diff @@ -0,0 +1,13 @@ +# DP: Untested patch suggested to fix #983878 + +--- a/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c ++++ b/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c +@@ -227,7 +227,7 @@ static statx_func* my_statx_func = NULL; + /** + * fstatat missing from glibc on Linux. + */ +-#if defined(__linux__) && (defined(__i386) || defined(__arm__)) ++#if defined(__linux__) && (defined(__i386) || defined(__arm__) || (defined(__mips__) && !defined(__mips64))) + #define FSTATAT64_SYSCALL_AVAILABLE + static int fstatat_wrapper(int dfd, const char *path, + struct stat *statbuf, int flag) diff --git a/patches/misalign-pointer-for-armhf.patch b/patches/misalign-pointer-for-armhf.patch new file mode 100644 index 000000000..7e60d00a7 --- /dev/null +++ b/patches/misalign-pointer-for-armhf.patch @@ -0,0 +1,23 @@ +Description: Misalign address in the test rather than structure + mk68-support.diff aligned metaspace structures by 4 bytes breaking the test. + Add 1 to address type rather than aligned structure to produce misaligned pointer. +--- a/test/hotspot/gtest/metaspace/test_is_metaspace_obj.cpp ++++ b/test/hotspot/gtest/metaspace/test_is_metaspace_obj.cpp +@@ -61,7 +61,7 @@ public: + ASSERT_TRUE(MetaspaceObj::is_valid(p)); + + // A misaligned object shall not be recognized +- const MetaspaceObj* p_misaligned = (MetaspaceObj*)((address)p) + 1; ++ const MetaspaceObj* p_misaligned = (MetaspaceObj*)((address)p + 1); + ASSERT_FALSE(MetaspaceObj::is_valid(p_misaligned)); + + // Test VirtualSpaceList::contains +@@ -72,7 +72,7 @@ public: + ASSERT_TRUE(vslist->contains((MetaWord*)p)); + + // A misaligned pointer shall still be recognized by list::contains +- ASSERT_TRUE(vslist->contains((MetaWord*)((address)p) + 1)); ++ ASSERT_TRUE(vslist->contains((MetaWord*)((address)p + 1))); + + // Now for some bogus values + ASSERT_FALSE(MetaspaceObj::is_valid((MetaspaceObj*)nullptr)); diff --git a/patches/multiple-pkcs11-library-init.diff b/patches/multiple-pkcs11-library-init.diff new file mode 100644 index 000000000..4f4f70b89 --- /dev/null +++ b/patches/multiple-pkcs11-library-init.diff @@ -0,0 +1,73 @@ +# HG changeset patch +# User andrew +# Date 1352129932 0 +# Node ID e9c857dcb964dbfa5eef3a3590244cb4d999cf7a +# Parent 1406789608b76d0906881979335d685855f44190 +Allow multiple PKCS11 library initialisation to be a non-critical error. + +--- a/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/Config.java ++++ b/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/Config.java +@@ -50,6 +50,7 @@ final class Config { + static final int ERR_HALT = 1; + static final int ERR_IGNORE_ALL = 2; + static final int ERR_IGNORE_LIB = 3; ++ static final int ERR_IGNORE_MULTI_INIT = 4; + + // same as allowSingleThreadedModules but controlled via a system property + // and applied to all providers. if set to false, no SunPKCS11 instances +@@ -1052,6 +1053,7 @@ final class Config { + case "ignoreAll" -> ERR_IGNORE_ALL; + case "ignoreMissingLibrary" -> ERR_IGNORE_LIB; + case "halt" -> ERR_HALT; ++ case "ignoreMultipleInitialisation" -> ERR_IGNORE_MULTI_INIT; + default -> throw excToken("Invalid value for handleStartupErrors:"); + }; + if (DEBUG) { +--- a/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java ++++ b/src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/SunPKCS11.java +@@ -181,26 +181,37 @@ public final class SunPKCS11 extends Aut + String nssLibraryDirectory = config.getNssLibraryDirectory(); + String nssSecmodDirectory = config.getNssSecmodDirectory(); + boolean nssOptimizeSpace = config.getNssOptimizeSpace(); ++ int errorHandling = config.getHandleStartupErrors(); + + if (secmod.isInitialized()) { + if (nssSecmodDirectory != null) { + String s = secmod.getConfigDir(); + if ((s != null) && + (!s.equals(nssSecmodDirectory))) { +- throw new ProviderException("Secmod directory " +- + nssSecmodDirectory +- + " invalid, NSS already initialized with " +- + s); ++ String msg = "Secmod directory " + nssSecmodDirectory ++ + " invalid, NSS already initialized with " + s; ++ if (errorHandling == Config.ERR_IGNORE_MULTI_INIT || ++ errorHandling == Config.ERR_IGNORE_ALL) { ++ throw new UnsupportedOperationException(msg); ++ } else { ++ throw new ProviderException(msg); ++ } + } + } + if (nssLibraryDirectory != null) { + String s = secmod.getLibDir(); + if ((s != null) && + (!s.equals(nssLibraryDirectory))) { +- throw new ProviderException("NSS library directory " +- + nssLibraryDirectory +- + " invalid, NSS already initialized with " +- + s); ++ String msg = "NSS library directory " ++ + nssLibraryDirectory ++ + " invalid, NSS already initialized with " ++ + s; ++ if (errorHandling == Config.ERR_IGNORE_MULTI_INIT || ++ errorHandling == Config.ERR_IGNORE_ALL) { ++ throw new UnsupportedOperationException(msg); ++ } else { ++ throw new ProviderException(msg); ++ } + } + } + } else { diff --git a/patches/no-pch-build.diff b/patches/no-pch-build.diff new file mode 100644 index 000000000..76726e84b --- /dev/null +++ b/patches/no-pch-build.diff @@ -0,0 +1,110 @@ +--- a/src/hotspot/src/share/vm/oops/arrayKlassKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 ++++ b/src/hotspot/src/share/vm/oops/arrayKlassKlass.cpp 2013-04-15 13:57:24.992929086 +0200 +@@ -30,6 +30,7 @@ + #include "runtime/handles.inline.hpp" + #ifndef SERIALGC + #include "gc_implementation/parNew/parOopClosures.inline.hpp" ++#include "gc_implementation/parallelScavenge/psOldGen.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" + #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" + #include "memory/cardTableRS.hpp" +--- a/src/hotspot/src/share/vm/oops/constantPoolKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 ++++ b/src/hotspot/src/share/vm/oops/constantPoolKlass.cpp 2013-04-15 14:02:52.143087149 +0200 +@@ -49,6 +49,7 @@ + #endif + #ifndef SERIALGC + #include "gc_implementation/parNew/parOopClosures.inline.hpp" ++#include "gc_implementation/parallelScavenge/psOldGen.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" + #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" + #include "memory/cardTableRS.hpp" +--- a/src/hotspot/src/share/vm/oops/cpCacheKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 ++++ b/src/hotspot/src/share/vm/oops/cpCacheKlass.cpp 2013-04-15 14:04:45.219838633 +0200 +@@ -35,6 +35,7 @@ + #include "runtime/handles.inline.hpp" + #ifndef SERIALGC + #include "gc_implementation/parNew/parOopClosures.inline.hpp" ++#include "gc_implementation/parallelScavenge/psOldGen.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" + #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" + #include "memory/cardTableRS.hpp" +--- a/src/hotspot/src/share/vm/oops/instanceKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 ++++ b/src/hotspot/src/share/vm/oops/instanceKlass.cpp 2013-04-15 14:07:55.861109867 +0200 +@@ -70,6 +70,7 @@ + #include "gc_implementation/g1/g1RemSet.inline.hpp" + #include "gc_implementation/g1/heapRegionSeq.inline.hpp" + #include "gc_implementation/parNew/parOopClosures.inline.hpp" ++#include "gc_implementation/parallelScavenge/psOldGen.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" + #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" + #include "oops/oop.pcgc.inline.hpp" +--- a/src/hotspot/src/share/vm/oops/instanceKlassKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 ++++ b/src/hotspot/src/share/vm/oops/instanceKlassKlass.cpp 2013-04-15 14:08:53.541485528 +0200 +@@ -44,6 +44,7 @@ + #include "runtime/fieldDescriptor.hpp" + #ifndef SERIALGC + #include "gc_implementation/parNew/parOopClosures.inline.hpp" ++#include "gc_implementation/parallelScavenge/psOldGen.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" + #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" + #include "memory/cardTableRS.hpp" +--- a/src/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 ++++ b/src/hotspot/src/share/vm/oops/instanceMirrorKlass.cpp 2013-04-15 14:10:11.162003798 +0200 +@@ -42,6 +42,7 @@ + #include "gc_implementation/g1/g1RemSet.inline.hpp" + #include "gc_implementation/g1/heapRegionSeq.inline.hpp" + #include "gc_implementation/parNew/parOopClosures.inline.hpp" ++#include "gc_implementation/parallelScavenge/psOldGen.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" + #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" + #include "oops/oop.pcgc.inline.hpp" +--- a/src/hotspot/src/share/vm/oops/instanceRefKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 ++++ b/src/hotspot/src/share/vm/oops/instanceRefKlass.cpp 2013-04-15 14:11:11.726403390 +0200 +@@ -39,6 +39,7 @@ + #include "gc_implementation/g1/g1RemSet.inline.hpp" + #include "gc_implementation/g1/heapRegionSeq.inline.hpp" + #include "gc_implementation/parNew/parOopClosures.inline.hpp" ++#include "gc_implementation/parallelScavenge/psOldGen.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" + #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" + #include "oops/oop.pcgc.inline.hpp" +--- a/src/hotspot/src/share/vm/oops/klassKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 ++++ b/src/hotspot/src/share/vm/oops/klassKlass.cpp 2013-04-15 14:13:01.999133769 +0200 +@@ -42,6 +42,7 @@ + #include "runtime/handles.inline.hpp" + #ifndef SERIALGC + #include "gc_implementation/parNew/parOopClosures.inline.hpp" ++#include "gc_implementation/parallelScavenge/psOldGen.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" + #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" + #include "memory/cardTableRS.hpp" +--- a/src/hotspot/src/share/vm/oops/objArrayKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 ++++ b/src/hotspot/src/share/vm/oops/objArrayKlass.cpp 2013-04-15 14:16:10.616389484 +0200 +@@ -47,6 +47,7 @@ + #include "gc_implementation/g1/g1RemSet.inline.hpp" + #include "gc_implementation/g1/heapRegionSeq.inline.hpp" + #include "gc_implementation/parNew/parOopClosures.inline.hpp" ++#include "gc_implementation/parallelScavenge/psOldGen.hpp" + #include "gc_implementation/parallelScavenge/psCompactionManager.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" + #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" +--- a/src/hotspot/src/share/vm/oops/objArrayKlassKlass.cpp~ 2013-03-04 22:51:00.000000000 +0100 ++++ b/src/hotspot/src/share/vm/oops/objArrayKlassKlass.cpp 2013-04-15 14:17:01.800729154 +0200 +@@ -33,6 +33,7 @@ + #include "oops/oop.inline2.hpp" + #ifndef SERIALGC + #include "gc_implementation/parNew/parOopClosures.inline.hpp" ++#include "gc_implementation/parallelScavenge/psOldGen.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" + #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" + #include "memory/cardTableRS.hpp" +--- a/src/hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp~ 2013-03-04 22:51:00.000000000 +0100 ++++ b/src/hotspot/src/share/vm/gc_implementation/parallelScavenge/psTasks.cpp 2013-04-15 14:20:24.782079605 +0200 +@@ -28,6 +28,7 @@ + #include "gc_implementation/parallelScavenge/cardTableExtension.hpp" + #include "gc_implementation/parallelScavenge/gcTaskManager.hpp" + #include "gc_implementation/parallelScavenge/psMarkSweep.hpp" ++#include "gc_implementation/parallelScavenge/psOldGen.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" + #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" diff --git a/patches/nspr+nss-headers.diff b/patches/nspr+nss-headers.diff new file mode 100644 index 000000000..235bb6d3e --- /dev/null +++ b/patches/nspr+nss-headers.diff @@ -0,0 +1,9090 @@ +Replace header files in src/jdk.crypto.cryptoki/share/native/libj2pkcs11. + +Import from NSPR 4.29: + - prcpucfg.h + - prtypes.h + +Import from NSS 2.63: + - pkcs11.h + - pkcs11f.h + - pkcs11n.h + - pkcs11p.h + - pkcs11t.h + - pkcs11u.h + +src/jdk.crypto.cryptoki/unix/native/libj2pkcs11/p11_md.h: + - Remove macro CK_PTR + - Remove macro CK_DEFINE_FUNCTION + - Remove macro CK_DECLARE_FUNCTION + - Remove macro CK_DECLARE_FUNCTION_POINTER + - Remove macro CK_CALLBACK_FUNCTION + +src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11wrapper.h: + - use CK_TRUE/CK_FALSE instead of TRUE/FALSE + +src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_convert.c: + - FIXME: CKM_KEA_DERIVE is undefined + +src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_util.c: + - FIXME: CKM_CAMELLIA_CTR is undefined + + +--- a/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11.h ++++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11.h +@@ -1,10 +1,15 @@ +-/* Copyright (c) OASIS Open 2016-2019. All Rights Reserved. +- * Distributed under the terms of the OASIS IPR Policy, +- * [http://www.oasis-open.org/policies-guidelines/ipr], AS-IS, WITHOUT ANY +- * IMPLIED OR EXPRESS WARRANTY; there is no warranty of MERCHANTABILITY, FITNESS FOR A +- * PARTICULAR PURPOSE or NONINFRINGEMENT of the rights of others. ++/* This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ ++/* ++ * Copyright (C) 1994-1999 RSA Security Inc. Licence to copy this document ++ * is granted provided that it is identified as "RSA Security In.c Public-Key ++ * Cryptography Standards (PKCS)" in all material mentioning or referencing ++ * this document. ++ * ++ * The latest version of this header can be found at: ++ * http://www.rsalabs.com/pkcs/pkcs-11/index.html + */ +- + #ifndef _PKCS11_H_ + #define _PKCS11_H_ 1 + +@@ -13,20 +18,21 @@ extern "C" { + #endif + + /* Before including this file (pkcs11.h) (or pkcs11t.h by +- * itself), 5 platform-specific macros must be defined. These ++ * itself), 6 platform-specific macros must be defined. These + * macros are described below, and typical definitions for them + * are also given. Be advised that these definitions can depend + * on both the platform and the compiler used (and possibly also +- * on whether a Cryptoki library is linked statically or ++ * on whether a PKCS #11 library is linked statically or + * dynamically). + * +- * In addition to defining these 5 macros, the packing convention +- * for Cryptoki structures should be set. The Cryptoki ++ * In addition to defining these 6 macros, the packing convention ++ * for PKCS #11 structures should be set. The PKCS #11 + * convention on packing is that structures should be 1-byte + * aligned. + * +- * If you're using Windows this might be done by using the following +- * preprocessor directive before including pkcs11.h or pkcs11t.h: ++ * In a Win32 environment, this might be done by using the ++ * following preprocessor directive before including pkcs11.h ++ * or pkcs11t.h: + * + * #pragma pack(push, cryptoki, 1) + * +@@ -35,8 +41,8 @@ extern "C" { + * + * #pragma pack(pop, cryptoki) + * +- * In a UNIX environment, you're on your own for this. You might +- * not need to do (or be able to do!) anything. ++ * In a UNIX environment, you're on your own here. You might ++ * not need to do anything. + * + * + * Now for the macros: +@@ -47,17 +53,42 @@ extern "C" { + * + * typedef CK_BYTE CK_PTR CK_BYTE_PTR; + * +- * If you're using windows, it might be defined by: ++ * In a Win32 environment, it might be defined by + * + * #define CK_PTR * + * +- * In a typical UNIX environment, it might be defined by: ++ * In a UNIX environment, it might be defined by + * + * #define CK_PTR * + * + * +- * 2. CK_DECLARE_FUNCTION(returnType, name): A macro which makes +- * an importable Cryptoki library function declaration out of a ++ * 2. CK_DEFINE_FUNCTION(returnType, name): A macro which makes ++ * an exportable PKCS #11 library function definition out of a ++ * return type and a function name. It should be used in the ++ * following fashion to define the exposed PKCS #11 functions in ++ * a PKCS #11 library: ++ * ++ * CK_DEFINE_FUNCTION(CK_RV, C_Initialize)( ++ * CK_VOID_PTR pReserved ++ * ) ++ * { ++ * ... ++ * } ++ * ++ * For defining a function in a Win32 PKCS #11 .dll, it might be ++ * defined by ++ * ++ * #define CK_DEFINE_FUNCTION(returnType, name) \ ++ * returnType __declspec(dllexport) name ++ * ++ * In a UNIX environment, it might be defined by ++ * ++ * #define CK_DEFINE_FUNCTION(returnType, name) \ ++ * returnType name ++ * ++ * ++ * 3. CK_DECLARE_FUNCTION(returnType, name): A macro which makes ++ * an importable PKCS #11 library function declaration out of a + * return type and a function name. It should be used in the + * following fashion: + * +@@ -65,49 +96,49 @@ extern "C" { + * CK_VOID_PTR pReserved + * ); + * +- * If you're using Windows to declare a function in a Win32 cryptoki .dll, +- * it might be defined by: ++ * For declaring a function in a Win32 PKCS #11 .dll, it might ++ * be defined by + * + * #define CK_DECLARE_FUNCTION(returnType, name) \ + * returnType __declspec(dllimport) name + * +- * In a UNIX environment, it might be defined by: ++ * In a UNIX environment, it might be defined by + * + * #define CK_DECLARE_FUNCTION(returnType, name) \ + * returnType name + * + * +- * 3. CK_DECLARE_FUNCTION_POINTER(returnType, name): A macro +- * which makes a Cryptoki API function pointer declaration or ++ * 4. CK_DECLARE_FUNCTION_POINTER(returnType, name): A macro ++ * which makes a PKCS #11 API function pointer declaration or + * function pointer type declaration out of a return type and a + * function name. It should be used in the following fashion: + * +- * // Define funcPtr to be a pointer to a Cryptoki API function ++ * // Define funcPtr to be a pointer to a PKCS #11 API function + * // taking arguments args and returning CK_RV. + * CK_DECLARE_FUNCTION_POINTER(CK_RV, funcPtr)(args); + * + * or + * + * // Define funcPtrType to be the type of a pointer to a +- * // Cryptoki API function taking arguments args and returning ++ * // PKCS #11 API function taking arguments args and returning + * // CK_RV, and then define funcPtr to be a variable of type + * // funcPtrType. + * typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, funcPtrType)(args); + * funcPtrType funcPtr; + * +- * If you're using Windows to access +- * functions in a Win32 Cryptoki .dll, in might be defined by: ++ * For accessing functions in a Win32 PKCS #11 .dll, in might be ++ * defined by + * + * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \ + * returnType __declspec(dllimport) (* name) + * +- * In a UNIX environment, it might be defined by: ++ * In a UNIX environment, it might be defined by + * + * #define CK_DECLARE_FUNCTION_POINTER(returnType, name) \ + * returnType (* name) + * + * +- * 4. CK_CALLBACK_FUNCTION(returnType, name): A macro which makes ++ * 5. CK_CALLBACK_FUNCTION(returnType, name): A macro which makes + * a function pointer type for an application callback out of + * a return type for the callback and a name for the callback. + * It should be used in the following fashion: +@@ -121,77 +152,76 @@ extern "C" { + * typedef CK_CALLBACK_FUNCTION(CK_RV, myCallbackType)(args); + * myCallbackType myCallback; + * +- * If you're using Windows, it might be defined by: ++ * In a Win32 environment, it might be defined by + * + * #define CK_CALLBACK_FUNCTION(returnType, name) \ + * returnType (* name) + * +- * In a UNIX environment, it might be defined by: ++ * In a UNIX environment, it might be defined by + * + * #define CK_CALLBACK_FUNCTION(returnType, name) \ + * returnType (* name) + * + * +- * 5. NULL_PTR: This macro is the value of a NULL pointer. ++ * 6. NULL_PTR: This macro is the value of a NULL pointer. + * + * In any ANSI/ISO C environment (and in many others as well), +- * this should best be defined by ++ * this should be defined by + * + * #ifndef NULL_PTR + * #define NULL_PTR 0 + * #endif + */ + +- +-/* All the various Cryptoki types and #define'd values are in the +- * file pkcs11t.h. +- */ ++/* All the various PKCS #11 types and #define'd values are in the ++ * file pkcs11t.h. */ + #include "pkcs11t.h" + +-#define __PASTE(x,y) x##y ++#define __PASTE(x, y) x##y + ++#ifndef CK_PKCS11_3_0 ++/* remember that we set it so we can unset it at the end */ ++#define __NSS_CK_PKCS11_3_IMPLICIT 1 ++#define CK_PKCS11_3_0 1 ++#endif + + /* ============================================================== + * Define the "extern" form of all the entry points. + * ============================================================== + */ + +-#define CK_NEED_ARG_LIST 1 ++#define CK_NEED_ARG_LIST 1 + #define CK_PKCS11_FUNCTION_INFO(name) \ +- extern CK_DECLARE_FUNCTION(CK_RV, name) ++ CK_DECLARE_FUNCTION(CK_RV, name) + +-/* pkcs11f.h has all the information about the Cryptoki +- * function prototypes. +- */ ++/* pkcs11f.h has all the information about the PKCS #11 ++ * function prototypes. */ + #include "pkcs11f.h" + + #undef CK_NEED_ARG_LIST + #undef CK_PKCS11_FUNCTION_INFO + +- + /* ============================================================== + * Define the typedef form of all the entry points. That is, for +- * each Cryptoki function C_XXX, define a type CK_C_XXX which is ++ * each PKCS #11 function C_XXX, define a type CK_C_XXX which is + * a pointer to that kind of function. + * ============================================================== + */ + +-#define CK_NEED_ARG_LIST 1 ++#define CK_NEED_ARG_LIST 1 + #define CK_PKCS11_FUNCTION_INFO(name) \ +- typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, __PASTE(CK_,name)) ++ typedef CK_DECLARE_FUNCTION_POINTER(CK_RV, __PASTE(CK_, name)) + +-/* pkcs11f.h has all the information about the Cryptoki +- * function prototypes. +- */ ++/* pkcs11f.h has all the information about the PKCS #11 ++ * function prototypes. */ + #include "pkcs11f.h" + + #undef CK_NEED_ARG_LIST + #undef CK_PKCS11_FUNCTION_INFO + +- + /* ============================================================== +- * Define structed vector of entry points. A CK_FUNCTION_LIST +- * contains a CK_VERSION indicating a library's Cryptoki version ++ * Define structed vector of entry points. A CK_FUNCTION_3_0_LIST ++ * contains a CK_VERSION indicating a library's PKCS #11 version + * and then a whole slew of function pointers to the routines in + * the library. This type was declared, but not defined, in + * pkcs11t.h. +@@ -199,39 +229,41 @@ extern "C" { + */ + + #define CK_PKCS11_FUNCTION_INFO(name) \ +- __PASTE(CK_,name) name; ++ __PASTE(CK_, name) \ ++ name; + +-/* Create the 3.0 Function list */ ++#include "pkcs11p.h" + struct CK_FUNCTION_LIST_3_0 { + +- CK_VERSION version; /* Cryptoki version */ ++ CK_VERSION version; /* PKCS #11 version */ + +-/* Pile all the function pointers into the CK_FUNCTION_LIST. */ +-/* pkcs11f.h has all the information about the Cryptoki +- * function prototypes. +- */ ++/* Pile all the function pointers into the CK_FUNCTION_LIST_3_0. */ ++/* pkcs11f.h has all the information about the PKCS #11 ++ * function prototypes. */ + #include "pkcs11f.h" +- + }; + + #define CK_PKCS11_2_0_ONLY 1 + +-/* Continue to define the old CK_FUNCTION_LIST */ ++/* now define the 2.0 function list */ + struct CK_FUNCTION_LIST { + +- CK_VERSION version; /* Cryptoki version */ ++ CK_VERSION version; /* PKCS #11 version */ + + /* Pile all the function pointers into the CK_FUNCTION_LIST. */ +-/* pkcs11f.h has all the information about the Cryptoki +- * function prototypes. +- */ ++/* pkcs11f.h has all the information about the PKCS #11 ++ * function prototypes. */ + #include "pkcs11f.h" +- + }; ++#include "pkcs11u.h" + + #undef CK_PKCS11_FUNCTION_INFO + #undef CK_PKCS11_2_0_ONLY + ++#ifdef __NSS_CK_PKCS11_3_IMPLICIT ++#undef CK_PKCS11_3_0 ++#undef __NSS_CK_PKCS11_3_IMPLICIT ++#endif + + #undef __PASTE + +@@ -239,6 +271,4 @@ struct CK_FUNCTION_LIST { + } + #endif + +-#endif /* _PKCS11_H_ */ +- +- ++#endif +--- a/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11f.h ++++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11f.h +@@ -1,1197 +1,1044 @@ +-/* Copyright (c) OASIS Open 2016, 2019. All Rights Reserved./ +- * /Distributed under the terms of the OASIS IPR Policy, +- * [http://www.oasis-open.org/policies-guidelines/ipr], AS-IS, WITHOUT ANY +- * IMPLIED OR EXPRESS WARRANTY; there is no warranty of MERCHANTABILITY, FITNESS FOR A +- * PARTICULAR PURPOSE or NONINFRINGEMENT of the rights of others. +- */ +- +-/* Latest version of the specification: +- * http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/pkcs11-base-v2.40.html +- */ +- +-/* This header file contains pretty much everything about all the +- * Cryptoki function prototypes. Because this information is +- * used for more than just declaring function prototypes, the +- * order of the functions appearing herein is important, and +- * should not be altered. +- */ ++/* This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ ++/* ++ * Copyright (C) 1994-1999 RSA Security Inc. Licence to copy this document ++ * is granted provided that it is identified as "RSA Security In.c Public-Key ++ * Cryptography Standards (PKCS)" in all material mentioning or referencing ++ * this document. ++ */ ++/* This function contains pretty much everything about all the */ ++/* PKCS #11 function prototypes. Because this information is */ ++/* used for more than just declaring function prototypes, the */ ++/* order of the functions appearing herein is important, and */ ++/* should not be altered. */ + + /* General-purpose */ + +-/* C_Initialize initializes the Cryptoki library. */ ++/* C_Initialize initializes the PKCS #11 library. */ + CK_PKCS11_FUNCTION_INFO(C_Initialize) + #ifdef CK_NEED_ARG_LIST + ( +- CK_VOID_PTR pInitArgs /* if this is not NULL_PTR, it gets +- * cast to CK_C_INITIALIZE_ARGS_PTR +- * and dereferenced +- */ +-); ++ CK_VOID_PTR pInitArgs /* if this is not NULL_PTR, it gets ++ * cast to CK_C_INITIALIZE_ARGS_PTR ++ * and dereferenced */ ++ ); + #endif + +- + /* C_Finalize indicates that an application is done with the +- * Cryptoki library. +- */ ++ * PKCS #11 library. */ + CK_PKCS11_FUNCTION_INFO(C_Finalize) + #ifdef CK_NEED_ARG_LIST + ( +- CK_VOID_PTR pReserved /* reserved. Should be NULL_PTR */ +-); ++ CK_VOID_PTR pReserved /* reserved. Should be NULL_PTR */ ++ ); + #endif + +- +-/* C_GetInfo returns general information about Cryptoki. */ ++/* C_GetInfo returns general information about PKCS #11. */ + CK_PKCS11_FUNCTION_INFO(C_GetInfo) + #ifdef CK_NEED_ARG_LIST + ( +- CK_INFO_PTR pInfo /* location that receives information */ +-); ++ CK_INFO_PTR pInfo /* location that receives information */ ++ ); + #endif + +- + /* C_GetFunctionList returns the function list. */ + CK_PKCS11_FUNCTION_INFO(C_GetFunctionList) + #ifdef CK_NEED_ARG_LIST + ( +- CK_FUNCTION_LIST_PTR_PTR ppFunctionList /* receives pointer to +- * function list +- */ +-); ++ CK_FUNCTION_LIST_PTR_PTR ppFunctionList /* receives pointer to ++ * function list */ ++ ); + #endif + +- +- + /* Slot and token management */ + + /* C_GetSlotList obtains a list of slots in the system. */ + CK_PKCS11_FUNCTION_INFO(C_GetSlotList) + #ifdef CK_NEED_ARG_LIST + ( +- CK_BBOOL tokenPresent, /* only slots with tokens */ +- CK_SLOT_ID_PTR pSlotList, /* receives array of slot IDs */ +- CK_ULONG_PTR pulCount /* receives number of slots */ +-); ++ CK_BBOOL tokenPresent, /* only slots with tokens? */ ++ CK_SLOT_ID_PTR pSlotList, /* receives array of slot IDs */ ++ CK_ULONG_PTR pulCount /* receives number of slots */ ++ ); + #endif + +- + /* C_GetSlotInfo obtains information about a particular slot in +- * the system. +- */ ++ * the system. */ + CK_PKCS11_FUNCTION_INFO(C_GetSlotInfo) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SLOT_ID slotID, /* the ID of the slot */ +- CK_SLOT_INFO_PTR pInfo /* receives the slot information */ +-); ++ CK_SLOT_ID slotID, /* the ID of the slot */ ++ CK_SLOT_INFO_PTR pInfo /* receives the slot information */ ++ ); + #endif + +- + /* C_GetTokenInfo obtains information about a particular token +- * in the system. +- */ ++ * in the system. */ + CK_PKCS11_FUNCTION_INFO(C_GetTokenInfo) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SLOT_ID slotID, /* ID of the token's slot */ +- CK_TOKEN_INFO_PTR pInfo /* receives the token information */ +-); ++ CK_SLOT_ID slotID, /* ID of the token's slot */ ++ CK_TOKEN_INFO_PTR pInfo /* receives the token information */ ++ ); + #endif + +- + /* C_GetMechanismList obtains a list of mechanism types +- * supported by a token. +- */ ++ * supported by a token. */ + CK_PKCS11_FUNCTION_INFO(C_GetMechanismList) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SLOT_ID slotID, /* ID of token's slot */ +- CK_MECHANISM_TYPE_PTR pMechanismList, /* gets mech. array */ +- CK_ULONG_PTR pulCount /* gets # of mechs. */ +-); ++ CK_SLOT_ID slotID, /* ID of token's slot */ ++ CK_MECHANISM_TYPE_PTR pMechanismList, /* gets mech. array */ ++ CK_ULONG_PTR pulCount /* gets # of mechs. */ ++ ); + #endif + +- + /* C_GetMechanismInfo obtains information about a particular +- * mechanism possibly supported by a token. +- */ ++ * mechanism possibly supported by a token. */ + CK_PKCS11_FUNCTION_INFO(C_GetMechanismInfo) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SLOT_ID slotID, /* ID of the token's slot */ +- CK_MECHANISM_TYPE type, /* type of mechanism */ +- CK_MECHANISM_INFO_PTR pInfo /* receives mechanism info */ +-); ++ CK_SLOT_ID slotID, /* ID of the token's slot */ ++ CK_MECHANISM_TYPE type, /* type of mechanism */ ++ CK_MECHANISM_INFO_PTR pInfo /* receives mechanism info */ ++ ); + #endif + +- + /* C_InitToken initializes a token. */ + CK_PKCS11_FUNCTION_INFO(C_InitToken) + #ifdef CK_NEED_ARG_LIST ++/* pLabel changed from CK_CHAR_PTR to CK_UTF8CHAR_PTR for v2.10 */ + ( +- CK_SLOT_ID slotID, /* ID of the token's slot */ +- CK_UTF8CHAR_PTR pPin, /* the SO's initial PIN */ +- CK_ULONG ulPinLen, /* length in bytes of the PIN */ +- CK_UTF8CHAR_PTR pLabel /* 32-byte token label (blank padded) */ +-); ++ CK_SLOT_ID slotID, /* ID of the token's slot */ ++ CK_UTF8CHAR_PTR pPin, /* the SO's initial PIN */ ++ CK_ULONG ulPinLen, /* length in bytes of the PIN */ ++ CK_UTF8CHAR_PTR pLabel /* 32-byte token label (blank padded) */ ++ ); + #endif + +- + /* C_InitPIN initializes the normal user's PIN. */ + CK_PKCS11_FUNCTION_INFO(C_InitPIN) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_UTF8CHAR_PTR pPin, /* the normal user's PIN */ +- CK_ULONG ulPinLen /* length in bytes of the PIN */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_UTF8CHAR_PTR pPin, /* the normal user's PIN */ ++ CK_ULONG ulPinLen /* length in bytes of the PIN */ ++ ); + #endif + +- + /* C_SetPIN modifies the PIN of the user who is logged in. */ + CK_PKCS11_FUNCTION_INFO(C_SetPIN) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_UTF8CHAR_PTR pOldPin, /* the old PIN */ +- CK_ULONG ulOldLen, /* length of the old PIN */ +- CK_UTF8CHAR_PTR pNewPin, /* the new PIN */ +- CK_ULONG ulNewLen /* length of the new PIN */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_UTF8CHAR_PTR pOldPin, /* the old PIN */ ++ CK_ULONG ulOldLen, /* length of the old PIN */ ++ CK_UTF8CHAR_PTR pNewPin, /* the new PIN */ ++ CK_ULONG ulNewLen /* length of the new PIN */ ++ ); + #endif + +- +- + /* Session management */ + + /* C_OpenSession opens a session between an application and a +- * token. +- */ ++ * token. */ + CK_PKCS11_FUNCTION_INFO(C_OpenSession) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SLOT_ID slotID, /* the slot's ID */ +- CK_FLAGS flags, /* from CK_SESSION_INFO */ +- CK_VOID_PTR pApplication, /* passed to callback */ +- CK_NOTIFY Notify, /* callback function */ +- CK_SESSION_HANDLE_PTR phSession /* gets session handle */ +-); ++ CK_SLOT_ID slotID, /* the slot's ID */ ++ CK_FLAGS flags, /* from CK_SESSION_INFO */ ++ CK_VOID_PTR pApplication, /* passed to callback */ ++ CK_NOTIFY Notify, /* callback function */ ++ CK_SESSION_HANDLE_PTR phSession /* gets session handle */ ++ ); + #endif + +- + /* C_CloseSession closes a session between an application and a +- * token. +- */ ++ * token. */ + CK_PKCS11_FUNCTION_INFO(C_CloseSession) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession /* the session's handle */ +-); ++ CK_SESSION_HANDLE hSession /* the session's handle */ ++ ); + #endif + +- + /* C_CloseAllSessions closes all sessions with a token. */ + CK_PKCS11_FUNCTION_INFO(C_CloseAllSessions) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SLOT_ID slotID /* the token's slot */ +-); ++ CK_SLOT_ID slotID /* the token's slot */ ++ ); + #endif + +- + /* C_GetSessionInfo obtains information about the session. */ + CK_PKCS11_FUNCTION_INFO(C_GetSessionInfo) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_SESSION_INFO_PTR pInfo /* receives session info */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_SESSION_INFO_PTR pInfo /* receives session info */ ++ ); + #endif + +- + /* C_GetOperationState obtains the state of the cryptographic operation +- * in a session. +- */ ++ * in a session. */ + CK_PKCS11_FUNCTION_INFO(C_GetOperationState) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_BYTE_PTR pOperationState, /* gets state */ +- CK_ULONG_PTR pulOperationStateLen /* gets state length */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_BYTE_PTR pOperationState, /* gets state */ ++ CK_ULONG_PTR pulOperationStateLen /* gets state length */ ++ ); + #endif + +- + /* C_SetOperationState restores the state of the cryptographic +- * operation in a session. +- */ ++ * operation in a session. */ + CK_PKCS11_FUNCTION_INFO(C_SetOperationState) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_BYTE_PTR pOperationState, /* holds state */ +- CK_ULONG ulOperationStateLen, /* holds state length */ +- CK_OBJECT_HANDLE hEncryptionKey, /* en/decryption key */ +- CK_OBJECT_HANDLE hAuthenticationKey /* sign/verify key */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_BYTE_PTR pOperationState, /* holds state */ ++ CK_ULONG ulOperationStateLen, /* holds state length */ ++ CK_OBJECT_HANDLE hEncryptionKey, /* en/decryption key */ ++ CK_OBJECT_HANDLE hAuthenticationKey /* sign/verify key */ ++ ); + #endif + +- + /* C_Login logs a user into a token. */ + CK_PKCS11_FUNCTION_INFO(C_Login) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_USER_TYPE userType, /* the user type */ +- CK_UTF8CHAR_PTR pPin, /* the user's PIN */ +- CK_ULONG ulPinLen /* the length of the PIN */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_USER_TYPE userType, /* the user type */ ++ CK_UTF8CHAR_PTR pPin, /* the user's PIN */ ++ CK_ULONG ulPinLen /* the length of the PIN */ ++ ); + #endif + +- + /* C_Logout logs a user out from a token. */ + CK_PKCS11_FUNCTION_INFO(C_Logout) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession /* the session's handle */ +-); ++ CK_SESSION_HANDLE hSession /* the session's handle */ ++ ); + #endif + +- +- + /* Object management */ + + /* C_CreateObject creates a new object. */ + CK_PKCS11_FUNCTION_INFO(C_CreateObject) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_ATTRIBUTE_PTR pTemplate, /* the object's template */ +- CK_ULONG ulCount, /* attributes in template */ +- CK_OBJECT_HANDLE_PTR phObject /* gets new object's handle. */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_ATTRIBUTE_PTR pTemplate, /* the object's template */ ++ CK_ULONG ulCount, /* attributes in template */ ++ CK_OBJECT_HANDLE_PTR phObject /* gets new object's handle. */ ++ ); + #endif + +- + /* C_CopyObject copies an object, creating a new object for the +- * copy. +- */ ++ * copy. */ + CK_PKCS11_FUNCTION_INFO(C_CopyObject) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_OBJECT_HANDLE hObject, /* the object's handle */ +- CK_ATTRIBUTE_PTR pTemplate, /* template for new object */ +- CK_ULONG ulCount, /* attributes in template */ +- CK_OBJECT_HANDLE_PTR phNewObject /* receives handle of copy */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_OBJECT_HANDLE hObject, /* the object's handle */ ++ CK_ATTRIBUTE_PTR pTemplate, /* template for new object */ ++ CK_ULONG ulCount, /* attributes in template */ ++ CK_OBJECT_HANDLE_PTR phNewObject /* receives handle of copy */ ++ ); + #endif + +- + /* C_DestroyObject destroys an object. */ + CK_PKCS11_FUNCTION_INFO(C_DestroyObject) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_OBJECT_HANDLE hObject /* the object's handle */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_OBJECT_HANDLE hObject /* the object's handle */ ++ ); + #endif + +- + /* C_GetObjectSize gets the size of an object in bytes. */ + CK_PKCS11_FUNCTION_INFO(C_GetObjectSize) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_OBJECT_HANDLE hObject, /* the object's handle */ +- CK_ULONG_PTR pulSize /* receives size of object */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_OBJECT_HANDLE hObject, /* the object's handle */ ++ CK_ULONG_PTR pulSize /* receives size of object */ ++ ); + #endif + +- + /* C_GetAttributeValue obtains the value of one or more object +- * attributes. +- */ ++ * attributes. */ + CK_PKCS11_FUNCTION_INFO(C_GetAttributeValue) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_OBJECT_HANDLE hObject, /* the object's handle */ +- CK_ATTRIBUTE_PTR pTemplate, /* specifies attrs; gets vals */ +- CK_ULONG ulCount /* attributes in template */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_OBJECT_HANDLE hObject, /* the object's handle */ ++ CK_ATTRIBUTE_PTR pTemplate, /* specifies attrs; gets vals */ ++ CK_ULONG ulCount /* attributes in template */ ++ ); + #endif + +- + /* C_SetAttributeValue modifies the value of one or more object +- * attributes. +- */ ++ * attributes */ + CK_PKCS11_FUNCTION_INFO(C_SetAttributeValue) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_OBJECT_HANDLE hObject, /* the object's handle */ +- CK_ATTRIBUTE_PTR pTemplate, /* specifies attrs and values */ +- CK_ULONG ulCount /* attributes in template */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_OBJECT_HANDLE hObject, /* the object's handle */ ++ CK_ATTRIBUTE_PTR pTemplate, /* specifies attrs and values */ ++ CK_ULONG ulCount /* attributes in template */ ++ ); + #endif + +- + /* C_FindObjectsInit initializes a search for token and session +- * objects that match a template. +- */ ++ * objects that match a template. */ + CK_PKCS11_FUNCTION_INFO(C_FindObjectsInit) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_ATTRIBUTE_PTR pTemplate, /* attribute values to match */ +- CK_ULONG ulCount /* attrs in search template */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_ATTRIBUTE_PTR pTemplate, /* attribute values to match */ ++ CK_ULONG ulCount /* attrs in search template */ ++ ); + #endif + +- + /* C_FindObjects continues a search for token and session + * objects that match a template, obtaining additional object +- * handles. +- */ ++ * handles. */ + CK_PKCS11_FUNCTION_INFO(C_FindObjects) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_OBJECT_HANDLE_PTR phObject, /* gets obj. handles */ +- CK_ULONG ulMaxObjectCount, /* max handles to get */ +- CK_ULONG_PTR pulObjectCount /* actual # returned */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_OBJECT_HANDLE_PTR phObject, /* gets obj. handles */ ++ CK_ULONG ulMaxObjectCount, /* max handles to get */ ++ CK_ULONG_PTR pulObjectCount /* actual # returned */ ++ ); + #endif + +- + /* C_FindObjectsFinal finishes a search for token and session +- * objects. +- */ ++ * objects. */ + CK_PKCS11_FUNCTION_INFO(C_FindObjectsFinal) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession /* the session's handle */ +-); ++ CK_SESSION_HANDLE hSession /* the session's handle */ ++ ); + #endif + +- +- + /* Encryption and decryption */ + + /* C_EncryptInit initializes an encryption operation. */ + CK_PKCS11_FUNCTION_INFO(C_EncryptInit) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism, /* the encryption mechanism */ +- CK_OBJECT_HANDLE hKey /* handle of encryption key */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_MECHANISM_PTR pMechanism, /* the encryption mechanism */ ++ CK_OBJECT_HANDLE hKey /* handle of encryption key */ ++ ); + #endif + +- + /* C_Encrypt encrypts single-part data. */ + CK_PKCS11_FUNCTION_INFO(C_Encrypt) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_BYTE_PTR pData, /* the plaintext data */ +- CK_ULONG ulDataLen, /* bytes of plaintext */ +- CK_BYTE_PTR pEncryptedData, /* gets ciphertext */ +- CK_ULONG_PTR pulEncryptedDataLen /* gets c-text size */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_BYTE_PTR pData, /* the plaintext data */ ++ CK_ULONG ulDataLen, /* bytes of plaintext */ ++ CK_BYTE_PTR pEncryptedData, /* gets ciphertext */ ++ CK_ULONG_PTR pulEncryptedDataLen /* gets c-text size */ ++ ); + #endif + +- + /* C_EncryptUpdate continues a multiple-part encryption +- * operation. +- */ ++ * operation. */ + CK_PKCS11_FUNCTION_INFO(C_EncryptUpdate) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_BYTE_PTR pPart, /* the plaintext data */ +- CK_ULONG ulPartLen, /* plaintext data len */ +- CK_BYTE_PTR pEncryptedPart, /* gets ciphertext */ +- CK_ULONG_PTR pulEncryptedPartLen /* gets c-text size */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_BYTE_PTR pPart, /* the plaintext data */ ++ CK_ULONG ulPartLen, /* plaintext data len */ ++ CK_BYTE_PTR pEncryptedPart, /* gets ciphertext */ ++ CK_ULONG_PTR pulEncryptedPartLen /* gets c-text size */ ++ ); + #endif + +- + /* C_EncryptFinal finishes a multiple-part encryption +- * operation. +- */ ++ * operation. */ + CK_PKCS11_FUNCTION_INFO(C_EncryptFinal) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session handle */ +- CK_BYTE_PTR pLastEncryptedPart, /* last c-text */ +- CK_ULONG_PTR pulLastEncryptedPartLen /* gets last size */ +-); ++ CK_SESSION_HANDLE hSession, /* session handle */ ++ CK_BYTE_PTR pLastEncryptedPart, /* last c-text */ ++ CK_ULONG_PTR pulLastEncryptedPartLen /* gets last size */ ++ ); + #endif + +- + /* C_DecryptInit initializes a decryption operation. */ + CK_PKCS11_FUNCTION_INFO(C_DecryptInit) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism, /* the decryption mechanism */ +- CK_OBJECT_HANDLE hKey /* handle of decryption key */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_MECHANISM_PTR pMechanism, /* the decryption mechanism */ ++ CK_OBJECT_HANDLE hKey /* handle of decryption key */ ++ ); + #endif + +- + /* C_Decrypt decrypts encrypted data in a single part. */ + CK_PKCS11_FUNCTION_INFO(C_Decrypt) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_BYTE_PTR pEncryptedData, /* ciphertext */ +- CK_ULONG ulEncryptedDataLen, /* ciphertext length */ +- CK_BYTE_PTR pData, /* gets plaintext */ +- CK_ULONG_PTR pulDataLen /* gets p-text size */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_BYTE_PTR pEncryptedData, /* ciphertext */ ++ CK_ULONG ulEncryptedDataLen, /* ciphertext length */ ++ CK_BYTE_PTR pData, /* gets plaintext */ ++ CK_ULONG_PTR pulDataLen /* gets p-text size */ ++ ); + #endif + +- + /* C_DecryptUpdate continues a multiple-part decryption +- * operation. +- */ ++ * operation. */ + CK_PKCS11_FUNCTION_INFO(C_DecryptUpdate) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_BYTE_PTR pEncryptedPart, /* encrypted data */ +- CK_ULONG ulEncryptedPartLen, /* input length */ +- CK_BYTE_PTR pPart, /* gets plaintext */ +- CK_ULONG_PTR pulPartLen /* p-text size */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_BYTE_PTR pEncryptedPart, /* encrypted data */ ++ CK_ULONG ulEncryptedPartLen, /* input length */ ++ CK_BYTE_PTR pPart, /* gets plaintext */ ++ CK_ULONG_PTR pulPartLen /* p-text size */ ++ ); + #endif + +- + /* C_DecryptFinal finishes a multiple-part decryption +- * operation. +- */ ++ * operation. */ + CK_PKCS11_FUNCTION_INFO(C_DecryptFinal) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pLastPart, /* gets plaintext */ +- CK_ULONG_PTR pulLastPartLen /* p-text size */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pLastPart, /* gets plaintext */ ++ CK_ULONG_PTR pulLastPartLen /* p-text size */ ++ ); + #endif + +- +- + /* Message digesting */ + + /* C_DigestInit initializes a message-digesting operation. */ + CK_PKCS11_FUNCTION_INFO(C_DigestInit) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism /* the digesting mechanism */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_MECHANISM_PTR pMechanism /* the digesting mechanism */ ++ ); + #endif + +- + /* C_Digest digests data in a single part. */ + CK_PKCS11_FUNCTION_INFO(C_Digest) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pData, /* data to be digested */ +- CK_ULONG ulDataLen, /* bytes of data to digest */ +- CK_BYTE_PTR pDigest, /* gets the message digest */ +- CK_ULONG_PTR pulDigestLen /* gets digest length */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pData, /* data to be digested */ ++ CK_ULONG ulDataLen, /* bytes of data to digest */ ++ CK_BYTE_PTR pDigest, /* gets the message digest */ ++ CK_ULONG_PTR pulDigestLen /* gets digest length */ ++ ); + #endif + +- + /* C_DigestUpdate continues a multiple-part message-digesting +- * operation. +- */ ++ * operation. */ + CK_PKCS11_FUNCTION_INFO(C_DigestUpdate) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pPart, /* data to be digested */ +- CK_ULONG ulPartLen /* bytes of data to be digested */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pPart, /* data to be digested */ ++ CK_ULONG ulPartLen /* bytes of data to be digested */ ++ ); + #endif + +- + /* C_DigestKey continues a multi-part message-digesting + * operation, by digesting the value of a secret key as part of +- * the data already digested. +- */ ++ * the data already digested. */ + CK_PKCS11_FUNCTION_INFO(C_DigestKey) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_OBJECT_HANDLE hKey /* secret key to digest */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_OBJECT_HANDLE hKey /* secret key to digest */ ++ ); + #endif + +- + /* C_DigestFinal finishes a multiple-part message-digesting +- * operation. +- */ ++ * operation. */ + CK_PKCS11_FUNCTION_INFO(C_DigestFinal) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pDigest, /* gets the message digest */ +- CK_ULONG_PTR pulDigestLen /* gets byte count of digest */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pDigest, /* gets the message digest */ ++ CK_ULONG_PTR pulDigestLen /* gets byte count of digest */ ++ ); + #endif + +- +- + /* Signing and MACing */ + + /* C_SignInit initializes a signature (private key encryption) + * operation, where the signature is (will be) an appendix to + * the data, and plaintext cannot be recovered from the +- * signature. +- */ ++ *signature. */ + CK_PKCS11_FUNCTION_INFO(C_SignInit) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism, /* the signature mechanism */ +- CK_OBJECT_HANDLE hKey /* handle of signature key */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_MECHANISM_PTR pMechanism, /* the signature mechanism */ ++ CK_OBJECT_HANDLE hKey /* handle of signature key */ ++ ); + #endif + +- + /* C_Sign signs (encrypts with private key) data in a single + * part, where the signature is (will be) an appendix to the +- * data, and plaintext cannot be recovered from the signature. +- */ ++ * data, and plaintext cannot be recovered from the signature. */ + CK_PKCS11_FUNCTION_INFO(C_Sign) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pData, /* the data to sign */ +- CK_ULONG ulDataLen, /* count of bytes to sign */ +- CK_BYTE_PTR pSignature, /* gets the signature */ +- CK_ULONG_PTR pulSignatureLen /* gets signature length */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pData, /* the data to sign */ ++ CK_ULONG ulDataLen, /* count of bytes to sign */ ++ CK_BYTE_PTR pSignature, /* gets the signature */ ++ CK_ULONG_PTR pulSignatureLen /* gets signature length */ ++ ); + #endif + +- + /* C_SignUpdate continues a multiple-part signature operation, + * where the signature is (will be) an appendix to the data, +- * and plaintext cannot be recovered from the signature. +- */ ++ * and plaintext cannot be recovered from the signature. */ + CK_PKCS11_FUNCTION_INFO(C_SignUpdate) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pPart, /* the data to sign */ +- CK_ULONG ulPartLen /* count of bytes to sign */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pPart, /* the data to sign */ ++ CK_ULONG ulPartLen /* count of bytes to sign */ ++ ); + #endif + +- + /* C_SignFinal finishes a multiple-part signature operation, +- * returning the signature. +- */ ++ * returning the signature. */ + CK_PKCS11_FUNCTION_INFO(C_SignFinal) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pSignature, /* gets the signature */ +- CK_ULONG_PTR pulSignatureLen /* gets signature length */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pSignature, /* gets the signature */ ++ CK_ULONG_PTR pulSignatureLen /* gets signature length */ ++ ); + #endif + +- + /* C_SignRecoverInit initializes a signature operation, where +- * the data can be recovered from the signature. +- */ ++ * the data can be recovered from the signature. */ + CK_PKCS11_FUNCTION_INFO(C_SignRecoverInit) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism, /* the signature mechanism */ +- CK_OBJECT_HANDLE hKey /* handle of the signature key */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_MECHANISM_PTR pMechanism, /* the signature mechanism */ ++ CK_OBJECT_HANDLE hKey /* handle of the signature key */ ++ ); + #endif + +- + /* C_SignRecover signs data in a single operation, where the +- * data can be recovered from the signature. +- */ ++ * data can be recovered from the signature. */ + CK_PKCS11_FUNCTION_INFO(C_SignRecover) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pData, /* the data to sign */ +- CK_ULONG ulDataLen, /* count of bytes to sign */ +- CK_BYTE_PTR pSignature, /* gets the signature */ +- CK_ULONG_PTR pulSignatureLen /* gets signature length */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pData, /* the data to sign */ ++ CK_ULONG ulDataLen, /* count of bytes to sign */ ++ CK_BYTE_PTR pSignature, /* gets the signature */ ++ CK_ULONG_PTR pulSignatureLen /* gets signature length */ ++ ); + #endif + +- +- + /* Verifying signatures and MACs */ + + /* C_VerifyInit initializes a verification operation, where the + * signature is an appendix to the data, and plaintext cannot +- * cannot be recovered from the signature (e.g. DSA). +- */ ++ * cannot be recovered from the signature (e.g. DSA). */ + CK_PKCS11_FUNCTION_INFO(C_VerifyInit) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism, /* the verification mechanism */ +- CK_OBJECT_HANDLE hKey /* verification key */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_MECHANISM_PTR pMechanism, /* the verification mechanism */ ++ CK_OBJECT_HANDLE hKey /* verification key */ ++ ); + #endif + +- + /* C_Verify verifies a signature in a single-part operation, + * where the signature is an appendix to the data, and plaintext +- * cannot be recovered from the signature. +- */ ++ * cannot be recovered from the signature. */ + CK_PKCS11_FUNCTION_INFO(C_Verify) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pData, /* signed data */ +- CK_ULONG ulDataLen, /* length of signed data */ +- CK_BYTE_PTR pSignature, /* signature */ +- CK_ULONG ulSignatureLen /* signature length*/ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pData, /* signed data */ ++ CK_ULONG ulDataLen, /* length of signed data */ ++ CK_BYTE_PTR pSignature, /* signature */ ++ CK_ULONG ulSignatureLen /* signature length*/ ++ ); + #endif + +- + /* C_VerifyUpdate continues a multiple-part verification + * operation, where the signature is an appendix to the data, +- * and plaintext cannot be recovered from the signature. +- */ ++ * and plaintext cannot be recovered from the signature. */ + CK_PKCS11_FUNCTION_INFO(C_VerifyUpdate) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pPart, /* signed data */ +- CK_ULONG ulPartLen /* length of signed data */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pPart, /* signed data */ ++ CK_ULONG ulPartLen /* length of signed data */ ++ ); + #endif + +- + /* C_VerifyFinal finishes a multiple-part verification +- * operation, checking the signature. +- */ ++ * operation, checking the signature. */ + CK_PKCS11_FUNCTION_INFO(C_VerifyFinal) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pSignature, /* signature to verify */ +- CK_ULONG ulSignatureLen /* signature length */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pSignature, /* signature to verify */ ++ CK_ULONG ulSignatureLen /* signature length */ ++ ); + #endif + +- + /* C_VerifyRecoverInit initializes a signature verification +- * operation, where the data is recovered from the signature. +- */ ++ * operation, where the data is recovered from the signature. */ + CK_PKCS11_FUNCTION_INFO(C_VerifyRecoverInit) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism, /* the verification mechanism */ +- CK_OBJECT_HANDLE hKey /* verification key */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_MECHANISM_PTR pMechanism, /* the verification mechanism */ ++ CK_OBJECT_HANDLE hKey /* verification key */ ++ ); + #endif + +- + /* C_VerifyRecover verifies a signature in a single-part +- * operation, where the data is recovered from the signature. +- */ ++ * operation, where the data is recovered from the signature. */ + CK_PKCS11_FUNCTION_INFO(C_VerifyRecover) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pSignature, /* signature to verify */ +- CK_ULONG ulSignatureLen, /* signature length */ +- CK_BYTE_PTR pData, /* gets signed data */ +- CK_ULONG_PTR pulDataLen /* gets signed data len */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pSignature, /* signature to verify */ ++ CK_ULONG ulSignatureLen, /* signature length */ ++ CK_BYTE_PTR pData, /* gets signed data */ ++ CK_ULONG_PTR pulDataLen /* gets signed data len */ ++ ); + #endif + +- +- + /* Dual-function cryptographic operations */ + + /* C_DigestEncryptUpdate continues a multiple-part digesting +- * and encryption operation. +- */ ++ * and encryption operation. */ + CK_PKCS11_FUNCTION_INFO(C_DigestEncryptUpdate) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_BYTE_PTR pPart, /* the plaintext data */ +- CK_ULONG ulPartLen, /* plaintext length */ +- CK_BYTE_PTR pEncryptedPart, /* gets ciphertext */ +- CK_ULONG_PTR pulEncryptedPartLen /* gets c-text length */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_BYTE_PTR pPart, /* the plaintext data */ ++ CK_ULONG ulPartLen, /* plaintext length */ ++ CK_BYTE_PTR pEncryptedPart, /* gets ciphertext */ ++ CK_ULONG_PTR pulEncryptedPartLen /* gets c-text length */ ++ ); + #endif + +- + /* C_DecryptDigestUpdate continues a multiple-part decryption and +- * digesting operation. +- */ ++ * digesting operation. */ + CK_PKCS11_FUNCTION_INFO(C_DecryptDigestUpdate) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_BYTE_PTR pEncryptedPart, /* ciphertext */ +- CK_ULONG ulEncryptedPartLen, /* ciphertext length */ +- CK_BYTE_PTR pPart, /* gets plaintext */ +- CK_ULONG_PTR pulPartLen /* gets plaintext len */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_BYTE_PTR pEncryptedPart, /* ciphertext */ ++ CK_ULONG ulEncryptedPartLen, /* ciphertext length */ ++ CK_BYTE_PTR pPart, /* gets plaintext */ ++ CK_ULONG_PTR pulPartLen /* gets plaintext len */ ++ ); + #endif + +- + /* C_SignEncryptUpdate continues a multiple-part signing and +- * encryption operation. +- */ ++ * encryption operation. */ + CK_PKCS11_FUNCTION_INFO(C_SignEncryptUpdate) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_BYTE_PTR pPart, /* the plaintext data */ +- CK_ULONG ulPartLen, /* plaintext length */ +- CK_BYTE_PTR pEncryptedPart, /* gets ciphertext */ +- CK_ULONG_PTR pulEncryptedPartLen /* gets c-text length */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_BYTE_PTR pPart, /* the plaintext data */ ++ CK_ULONG ulPartLen, /* plaintext length */ ++ CK_BYTE_PTR pEncryptedPart, /* gets ciphertext */ ++ CK_ULONG_PTR pulEncryptedPartLen /* gets c-text length */ ++ ); + #endif + +- + /* C_DecryptVerifyUpdate continues a multiple-part decryption and +- * verify operation. +- */ ++ * verify operation. */ + CK_PKCS11_FUNCTION_INFO(C_DecryptVerifyUpdate) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_BYTE_PTR pEncryptedPart, /* ciphertext */ +- CK_ULONG ulEncryptedPartLen, /* ciphertext length */ +- CK_BYTE_PTR pPart, /* gets plaintext */ +- CK_ULONG_PTR pulPartLen /* gets p-text length */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_BYTE_PTR pEncryptedPart, /* ciphertext */ ++ CK_ULONG ulEncryptedPartLen, /* ciphertext length */ ++ CK_BYTE_PTR pPart, /* gets plaintext */ ++ CK_ULONG_PTR pulPartLen /* gets p-text length */ ++ ); + #endif + +- +- + /* Key management */ + + /* C_GenerateKey generates a secret key, creating a new key +- * object. +- */ ++ * object. */ + CK_PKCS11_FUNCTION_INFO(C_GenerateKey) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism, /* key generation mech. */ +- CK_ATTRIBUTE_PTR pTemplate, /* template for new key */ +- CK_ULONG ulCount, /* # of attrs in template */ +- CK_OBJECT_HANDLE_PTR phKey /* gets handle of new key */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_MECHANISM_PTR pMechanism, /* key generation mech. */ ++ CK_ATTRIBUTE_PTR pTemplate, /* template for new key */ ++ CK_ULONG ulCount, /* # of attrs in template */ ++ CK_OBJECT_HANDLE_PTR phKey /* gets handle of new key */ ++ ); + #endif + +- + /* C_GenerateKeyPair generates a public-key/private-key pair, +- * creating new key objects. +- */ ++ * creating new key objects. */ + CK_PKCS11_FUNCTION_INFO(C_GenerateKeyPair) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session handle */ +- CK_MECHANISM_PTR pMechanism, /* key-gen mech. */ +- CK_ATTRIBUTE_PTR pPublicKeyTemplate, /* template for pub. key */ +- CK_ULONG ulPublicKeyAttributeCount, /* # pub. attrs. */ +- CK_ATTRIBUTE_PTR pPrivateKeyTemplate, /* template for priv. key */ +- CK_ULONG ulPrivateKeyAttributeCount, /* # priv. attrs. */ +- CK_OBJECT_HANDLE_PTR phPublicKey, /* gets pub. key handle */ +- CK_OBJECT_HANDLE_PTR phPrivateKey /* gets priv. key handle */ +-); ++ CK_SESSION_HANDLE hSession, /* session handle */ ++ CK_MECHANISM_PTR pMechanism, /* key-gen mech. */ ++ CK_ATTRIBUTE_PTR pPublicKeyTemplate, /* template for pub. key */ ++ CK_ULONG ulPublicKeyAttributeCount, /* # pub. attrs. */ ++ CK_ATTRIBUTE_PTR pPrivateKeyTemplate, /* template for priv. key */ ++ CK_ULONG ulPrivateKeyAttributeCount, /* # priv. attrs. */ ++ CK_OBJECT_HANDLE_PTR phPublicKey, /* gets pub. key handle */ ++ CK_OBJECT_HANDLE_PTR phPrivateKey /* gets priv. key handle */ ++ ); + #endif + +- + /* C_WrapKey wraps (i.e., encrypts) a key. */ + CK_PKCS11_FUNCTION_INFO(C_WrapKey) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism, /* the wrapping mechanism */ +- CK_OBJECT_HANDLE hWrappingKey, /* wrapping key */ +- CK_OBJECT_HANDLE hKey, /* key to be wrapped */ +- CK_BYTE_PTR pWrappedKey, /* gets wrapped key */ +- CK_ULONG_PTR pulWrappedKeyLen /* gets wrapped key size */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_MECHANISM_PTR pMechanism, /* the wrapping mechanism */ ++ CK_OBJECT_HANDLE hWrappingKey, /* wrapping key */ ++ CK_OBJECT_HANDLE hKey, /* key to be wrapped */ ++ CK_BYTE_PTR pWrappedKey, /* gets wrapped key */ ++ CK_ULONG_PTR pulWrappedKeyLen /* gets wrapped key size */ ++ ); + #endif + +- + /* C_UnwrapKey unwraps (decrypts) a wrapped key, creating a new +- * key object. +- */ ++ * key object. */ + CK_PKCS11_FUNCTION_INFO(C_UnwrapKey) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_MECHANISM_PTR pMechanism, /* unwrapping mech. */ +- CK_OBJECT_HANDLE hUnwrappingKey, /* unwrapping key */ +- CK_BYTE_PTR pWrappedKey, /* the wrapped key */ +- CK_ULONG ulWrappedKeyLen, /* wrapped key len */ +- CK_ATTRIBUTE_PTR pTemplate, /* new key template */ +- CK_ULONG ulAttributeCount, /* template length */ +- CK_OBJECT_HANDLE_PTR phKey /* gets new handle */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_MECHANISM_PTR pMechanism, /* unwrapping mech. */ ++ CK_OBJECT_HANDLE hUnwrappingKey, /* unwrapping key */ ++ CK_BYTE_PTR pWrappedKey, /* the wrapped key */ ++ CK_ULONG ulWrappedKeyLen, /* wrapped key len */ ++ CK_ATTRIBUTE_PTR pTemplate, /* new key template */ ++ CK_ULONG ulAttributeCount, /* template length */ ++ CK_OBJECT_HANDLE_PTR phKey /* gets new handle */ ++ ); + #endif + +- + /* C_DeriveKey derives a key from a base key, creating a new key +- * object. +- */ ++ * object. */ + CK_PKCS11_FUNCTION_INFO(C_DeriveKey) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* session's handle */ +- CK_MECHANISM_PTR pMechanism, /* key deriv. mech. */ +- CK_OBJECT_HANDLE hBaseKey, /* base key */ +- CK_ATTRIBUTE_PTR pTemplate, /* new key template */ +- CK_ULONG ulAttributeCount, /* template length */ +- CK_OBJECT_HANDLE_PTR phKey /* gets new handle */ +-); ++ CK_SESSION_HANDLE hSession, /* session's handle */ ++ CK_MECHANISM_PTR pMechanism, /* key deriv. mech. */ ++ CK_OBJECT_HANDLE hBaseKey, /* base key */ ++ CK_ATTRIBUTE_PTR pTemplate, /* new key template */ ++ CK_ULONG ulAttributeCount, /* template length */ ++ CK_OBJECT_HANDLE_PTR phKey /* gets new handle */ ++ ); + #endif + +- +- + /* Random number generation */ + + /* C_SeedRandom mixes additional seed material into the token's +- * random number generator. +- */ ++ * random number generator. */ + CK_PKCS11_FUNCTION_INFO(C_SeedRandom) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR pSeed, /* the seed material */ +- CK_ULONG ulSeedLen /* length of seed material */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR pSeed, /* the seed material */ ++ CK_ULONG ulSeedLen /* length of seed material */ ++ ); + #endif + +- + /* C_GenerateRandom generates random data. */ + CK_PKCS11_FUNCTION_INFO(C_GenerateRandom) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_BYTE_PTR RandomData, /* receives the random data */ +- CK_ULONG ulRandomLen /* # of bytes to generate */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_BYTE_PTR RandomData, /* receives the random data */ ++ CK_ULONG ulRandomLen /* # of bytes to generate */ ++ ); + #endif + +- +- + /* Parallel function management */ + + /* C_GetFunctionStatus is a legacy function; it obtains an + * updated status of a function running in parallel with an +- * application. +- */ ++ * application. */ + CK_PKCS11_FUNCTION_INFO(C_GetFunctionStatus) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession /* the session's handle */ +-); ++ CK_SESSION_HANDLE hSession /* the session's handle */ ++ ); + #endif + +- + /* C_CancelFunction is a legacy function; it cancels a function +- * running in parallel. +- */ ++ * running in parallel. */ + CK_PKCS11_FUNCTION_INFO(C_CancelFunction) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession /* the session's handle */ +-); ++ CK_SESSION_HANDLE hSession /* the session's handle */ ++ ); + #endif + ++/* Functions added in for PKCS #11 Version 2.01 or later */ + + /* C_WaitForSlotEvent waits for a slot event (token insertion, +- * removal, etc.) to occur. +- */ ++ * removal, etc.) to occur. */ + CK_PKCS11_FUNCTION_INFO(C_WaitForSlotEvent) + #ifdef CK_NEED_ARG_LIST + ( +- CK_FLAGS flags, /* blocking/nonblocking flag */ +- CK_SLOT_ID_PTR pSlot, /* location that receives the slot ID */ +- CK_VOID_PTR pRserved /* reserved. Should be NULL_PTR */ +-); ++ CK_FLAGS flags, /* blocking/nonblocking flag */ ++ CK_SLOT_ID_PTR pSlot, /* location that receives the slot ID */ ++ CK_VOID_PTR pRserved /* reserved. Should be NULL_PTR */ ++ ); + #endif + +-#ifndef CK_PKCS11_2_0_ONLY +-/* C_GetInterfaceList returns all the interfaces supported by the module*/ ++#if defined(CK_PKCS11_3_0) && !defined(CK_PKCS11_2_0_ONLY) + CK_PKCS11_FUNCTION_INFO(C_GetInterfaceList) + #ifdef CK_NEED_ARG_LIST + ( +- CK_INTERFACE_PTR pInterfacesList, /* returned interfaces */ +- CK_ULONG_PTR pulCount /* number of interfaces returned */ +-); ++ CK_INTERFACE_PTR interfaces, ++ CK_ULONG_PTR pulCount); + #endif + +-/* C_GetInterface returns a specific interface from the module. */ + CK_PKCS11_FUNCTION_INFO(C_GetInterface) + #ifdef CK_NEED_ARG_LIST + ( +- CK_UTF8CHAR_PTR pInterfaceName, /* name of the interface */ +- CK_VERSION_PTR pVersion, /* version of the interface */ +- CK_INTERFACE_PTR_PTR ppInterface, /* returned interface */ +- CK_FLAGS flags /* flags controlling the semantics +- * of the interface */ +-); ++ CK_UTF8CHAR_PTR pInterfaceName, ++ CK_VERSION_PTR pVersion, ++ CK_INTERFACE_PTR_PTR ppInterface, ++ CK_FLAGS flags); + #endif + + CK_PKCS11_FUNCTION_INFO(C_LoginUser) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_USER_TYPE userType, /* the user type */ +- CK_UTF8CHAR_PTR pPin, /* the user's PIN */ +- CK_ULONG ulPinLen, /* the length of the PIN */ +- CK_UTF8CHAR_PTR pUsername, /* the user's name */ +- CK_ULONG ulUsernameLen /*the length of the user's name */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_USER_TYPE userType, ++ CK_CHAR_PTR pPin, ++ CK_ULONG ulPinLen, ++ CK_UTF8CHAR_PTR pUsername, ++ CK_ULONG ulUsernameLen); + #endif + + CK_PKCS11_FUNCTION_INFO(C_SessionCancel) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_FLAGS flags /* flags control which sessions are cancelled */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_FLAGS flags); + #endif + + CK_PKCS11_FUNCTION_INFO(C_MessageEncryptInit) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism, /* the encryption mechanism */ +- CK_OBJECT_HANDLE hKey /* handle of encryption key */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_MECHANISM_PTR pMechanism, ++ CK_OBJECT_HANDLE hKey); + #endif + + CK_PKCS11_FUNCTION_INFO(C_EncryptMessage) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_VOID_PTR pParameter, /* message specific parameter */ +- CK_ULONG ulParameterLen, /* length of message specific parameter */ +- CK_BYTE_PTR pAssociatedData, /* AEAD Associated data */ +- CK_ULONG ulAssociatedDataLen, /* AEAD Associated data length */ +- CK_BYTE_PTR pPlaintext, /* plain text */ +- CK_ULONG ulPlaintextLen, /* plain text length */ +- CK_BYTE_PTR pCiphertext, /* gets cipher text */ +- CK_ULONG_PTR pulCiphertextLen /* gets cipher text length */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_VOID_PTR pParameter, ++ CK_ULONG ulParameterLen, ++ CK_BYTE_PTR pAssociatedData, ++ CK_ULONG ulAssociatedDataLen, ++ CK_BYTE_PTR pPlaintext, ++ CK_ULONG ulPlaintextLen, ++ CK_BYTE_PTR pCiphertext, ++ CK_ULONG_PTR pulCiphertextLen); + #endif + + CK_PKCS11_FUNCTION_INFO(C_EncryptMessageBegin) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_VOID_PTR pParameter, /* message specific parameter */ +- CK_ULONG ulParameterLen, /* length of message specific parameter */ +- CK_BYTE_PTR pAssociatedData, /* AEAD Associated data */ +- CK_ULONG ulAssociatedDataLen /* AEAD Associated data length */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_VOID_PTR pParameter, ++ CK_ULONG ulParameterLen, ++ CK_BYTE_PTR pAssociatedData, ++ CK_ULONG ulAssociatedDataLen); + #endif + + CK_PKCS11_FUNCTION_INFO(C_EncryptMessageNext) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_VOID_PTR pParameter, /* message specific parameter */ +- CK_ULONG ulParameterLen, /* length of message specific parameter */ +- CK_BYTE_PTR pPlaintextPart, /* plain text */ +- CK_ULONG ulPlaintextPartLen, /* plain text length */ +- CK_BYTE_PTR pCiphertextPart, /* gets cipher text */ +- CK_ULONG_PTR pulCiphertextPartLen, /* gets cipher text length */ +- CK_FLAGS flags /* multi mode flag */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_VOID_PTR pParameter, ++ CK_ULONG ulParameterLen, ++ CK_BYTE_PTR pPlaintextPart, ++ CK_ULONG ulPlaintextPartLen, ++ CK_BYTE_PTR pCiphertextPart, ++ CK_ULONG_PTR pulCiphertextPartLen, ++ CK_FLAGS flags); + #endif + + CK_PKCS11_FUNCTION_INFO(C_MessageEncryptFinal) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession /* the session's handle */ +-); ++ CK_SESSION_HANDLE hSession); + #endif + + CK_PKCS11_FUNCTION_INFO(C_MessageDecryptInit) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism, /* the decryption mechanism */ +- CK_OBJECT_HANDLE hKey /* handle of decryption key */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_MECHANISM_PTR pMechanism, ++ CK_OBJECT_HANDLE hKey); + #endif + + CK_PKCS11_FUNCTION_INFO(C_DecryptMessage) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_VOID_PTR pParameter, /* message specific parameter */ +- CK_ULONG ulParameterLen, /* length of message specific parameter */ +- CK_BYTE_PTR pAssociatedData, /* AEAD Associated data */ +- CK_ULONG ulAssociatedDataLen, /* AEAD Associated data length */ +- CK_BYTE_PTR pCiphertext, /* cipher text */ +- CK_ULONG ulCiphertextLen, /* cipher text length */ +- CK_BYTE_PTR pPlaintext, /* gets plain text */ +- CK_ULONG_PTR pulPlaintextLen /* gets plain text length */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_VOID_PTR pParameter, ++ CK_ULONG ulParameterLen, ++ CK_BYTE_PTR pAssociatedData, ++ CK_ULONG ulAssociatedDataLen, ++ CK_BYTE_PTR pCiphertext, ++ CK_ULONG ulCiphertextLen, ++ CK_BYTE_PTR pPlaintext, ++ CK_ULONG_PTR pulPlaintextLen); + #endif + + CK_PKCS11_FUNCTION_INFO(C_DecryptMessageBegin) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_VOID_PTR pParameter, /* message specific parameter */ +- CK_ULONG ulParameterLen, /* length of message specific parameter */ +- CK_BYTE_PTR pAssociatedData, /* AEAD Associated data */ +- CK_ULONG ulAssociatedDataLen /* AEAD Associated data length */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_VOID_PTR pParameter, ++ CK_ULONG ulParameterLen, ++ CK_BYTE_PTR pAssociatedData, ++ CK_ULONG ulAssociatedDataLen); + #endif + + CK_PKCS11_FUNCTION_INFO(C_DecryptMessageNext) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_VOID_PTR pParameter, /* message specific parameter */ +- CK_ULONG ulParameterLen, /* length of message specific parameter */ +- CK_BYTE_PTR pCiphertextPart, /* cipher text */ +- CK_ULONG ulCiphertextPartLen, /* cipher text length */ +- CK_BYTE_PTR pPlaintextPart, /* gets plain text */ +- CK_ULONG_PTR pulPlaintextPartLen, /* gets plain text length */ +- CK_FLAGS flags /* multi mode flag */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_VOID_PTR pParameter, ++ CK_ULONG ulParameterLen, ++ CK_BYTE_PTR pCiphertextPart, ++ CK_ULONG ulCiphertextPartLen, ++ CK_BYTE_PTR pPlaintextPart, ++ CK_ULONG_PTR pulPlaintextPartLen, ++ CK_FLAGS flags); + #endif + + CK_PKCS11_FUNCTION_INFO(C_MessageDecryptFinal) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession /* the session's handle */ +-); ++ CK_SESSION_HANDLE hSession); + #endif + + CK_PKCS11_FUNCTION_INFO(C_MessageSignInit) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism, /* the signing mechanism */ +- CK_OBJECT_HANDLE hKey /* handle of signing key */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_MECHANISM_PTR pMechanism, ++ CK_OBJECT_HANDLE hKey); + #endif + + CK_PKCS11_FUNCTION_INFO(C_SignMessage) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_VOID_PTR pParameter, /* message specific parameter */ +- CK_ULONG ulParameterLen, /* length of message specific parameter */ +- CK_BYTE_PTR pData, /* data to sign */ +- CK_ULONG ulDataLen, /* data to sign length */ +- CK_BYTE_PTR pSignature, /* gets signature */ +- CK_ULONG_PTR pulSignatureLen /* gets signature length */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_VOID_PTR pParameter, ++ CK_ULONG ulParameterLen, ++ CK_BYTE_PTR pData, ++ CK_ULONG ulDataLen, ++ ++ CK_BYTE_PTR pSignature, ++ CK_ULONG_PTR pulSignatureLen); + #endif + + CK_PKCS11_FUNCTION_INFO(C_SignMessageBegin) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_VOID_PTR pParameter, /* message specific parameter */ +- CK_ULONG ulParameterLen /* length of message specific parameter */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_VOID_PTR pParameter, ++ CK_ULONG ulParameterLen); + #endif + + CK_PKCS11_FUNCTION_INFO(C_SignMessageNext) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_VOID_PTR pParameter, /* message specific parameter */ +- CK_ULONG ulParameterLen, /* length of message specific parameter */ +- CK_BYTE_PTR pData, /* data to sign */ +- CK_ULONG ulDataLen, /* data to sign length */ +- CK_BYTE_PTR pSignature, /* gets signature */ +- CK_ULONG_PTR pulSignatureLen /* gets signature length */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_VOID_PTR pParameter, ++ CK_ULONG ulParameterLen, ++ CK_BYTE_PTR pData, ++ CK_ULONG ulDataLen, ++ CK_BYTE_PTR pSignature, ++ CK_ULONG_PTR pulSignatureLen); + #endif + + CK_PKCS11_FUNCTION_INFO(C_MessageSignFinal) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession /* the session's handle */ +-); ++ CK_SESSION_HANDLE hSession); + #endif + + CK_PKCS11_FUNCTION_INFO(C_MessageVerifyInit) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_MECHANISM_PTR pMechanism, /* the signing mechanism */ +- CK_OBJECT_HANDLE hKey /* handle of signing key */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_MECHANISM_PTR pMechanism, ++ CK_OBJECT_HANDLE hKey); + #endif + + CK_PKCS11_FUNCTION_INFO(C_VerifyMessage) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_VOID_PTR pParameter, /* message specific parameter */ +- CK_ULONG ulParameterLen, /* length of message specific parameter */ +- CK_BYTE_PTR pData, /* data to sign */ +- CK_ULONG ulDataLen, /* data to sign length */ +- CK_BYTE_PTR pSignature, /* signature */ +- CK_ULONG ulSignatureLen /* signature length */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_VOID_PTR pParameter, ++ CK_ULONG ulParameterLen, ++ CK_BYTE_PTR pData, ++ CK_ULONG ulDataLen, ++ CK_BYTE_PTR pSignature, ++ CK_ULONG ulSignatureLen); + #endif + + CK_PKCS11_FUNCTION_INFO(C_VerifyMessageBegin) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_VOID_PTR pParameter, /* message specific parameter */ +- CK_ULONG ulParameterLen /* length of message specific parameter */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_VOID_PTR pParameter, ++ CK_ULONG ulParameterLen); + #endif + + CK_PKCS11_FUNCTION_INFO(C_VerifyMessageNext) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_VOID_PTR pParameter, /* message specific parameter */ +- CK_ULONG ulParameterLen, /* length of message specific parameter */ +- CK_BYTE_PTR pData, /* data to sign */ +- CK_ULONG ulDataLen, /* data to sign length */ +- CK_BYTE_PTR pSignature, /* signature */ +- CK_ULONG ulSignatureLen /* signature length */ +-); ++ CK_SESSION_HANDLE hSession, ++ CK_VOID_PTR pParameter, ++ CK_ULONG ulParameterLen, ++ CK_BYTE_PTR pData, ++ CK_ULONG ulDataLen, ++ CK_BYTE_PTR pSignature, ++ CK_ULONG ulSignatureLen); + #endif + + CK_PKCS11_FUNCTION_INFO(C_MessageVerifyFinal) + #ifdef CK_NEED_ARG_LIST + ( +- CK_SESSION_HANDLE hSession /* the session's handle */ +-); ++ CK_SESSION_HANDLE hSession); + #endif + +-#endif /* CK_PKCS11_2_0_ONLY */ +- ++#endif +--- /dev/null ++++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11n.h +@@ -0,0 +1,672 @@ ++/* This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ ++ ++#ifndef _PKCS11N_H_ ++#define _PKCS11N_H_ ++ ++/* ++ * pkcs11n.h ++ * ++ * This file contains the NSS-specific type definitions for Cryptoki ++ * (PKCS#11). ++ */ ++ ++/* ++ * NSSCK_VENDOR_NSS ++ * ++ * Cryptoki reserves the high half of all the number spaces for ++ * vendor-defined use. I'd like to keep all of our NSS- ++ * specific values together, but not in the oh-so-obvious ++ * 0x80000001, 0x80000002, etc. area. So I've picked an offset, ++ * and constructed values for the beginnings of our spaces. ++ * ++ * Note that some "historical" Netscape values don't fall within ++ * this range. ++ */ ++#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */ ++ ++/* ++ * NSS-defined object classes ++ * ++ */ ++#define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS) ++ ++#define CKO_NSS_CRL (CKO_NSS + 1) ++#define CKO_NSS_SMIME (CKO_NSS + 2) ++#define CKO_NSS_TRUST (CKO_NSS + 3) ++#define CKO_NSS_BUILTIN_ROOT_LIST (CKO_NSS + 4) ++#define CKO_NSS_NEWSLOT (CKO_NSS + 5) ++#define CKO_NSS_DELSLOT (CKO_NSS + 6) ++ ++/* ++ * NSS-defined key types ++ * ++ */ ++#define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS) ++ ++#define CKK_NSS_PKCS8 (CKK_NSS + 1) ++ ++#define CKK_NSS_JPAKE_ROUND1 (CKK_NSS + 2) ++#define CKK_NSS_JPAKE_ROUND2 (CKK_NSS + 3) ++ ++#define CKK_NSS_CHACHA20 (CKK_NSS + 4) ++ ++/* ++ * NSS-defined certificate types ++ * ++ */ ++#define CKC_NSS (CKC_VENDOR_DEFINED | NSSCK_VENDOR_NSS) ++ ++/* FAKE PKCS #11 defines */ ++#define CKA_DIGEST 0x81000000L ++#define CKA_NSS_MESSAGE 0x82000000L ++#define CKA_NSS_MESSAGE_MASK 0xff000000L ++#define CKA_FLAGS_ONLY 0 /* CKA_CLASS */ ++ ++/* ++ * NSS-defined object attributes ++ * ++ */ ++#define CKA_NSS (CKA_VENDOR_DEFINED | NSSCK_VENDOR_NSS) ++ ++#define CKA_NSS_URL (CKA_NSS + 1) ++#define CKA_NSS_EMAIL (CKA_NSS + 2) ++#define CKA_NSS_SMIME_INFO (CKA_NSS + 3) ++#define CKA_NSS_SMIME_TIMESTAMP (CKA_NSS + 4) ++#define CKA_NSS_PKCS8_SALT (CKA_NSS + 5) ++#define CKA_NSS_PASSWORD_CHECK (CKA_NSS + 6) ++#define CKA_NSS_EXPIRES (CKA_NSS + 7) ++#define CKA_NSS_KRL (CKA_NSS + 8) ++ ++#define CKA_NSS_PQG_COUNTER (CKA_NSS + 20) ++#define CKA_NSS_PQG_SEED (CKA_NSS + 21) ++#define CKA_NSS_PQG_H (CKA_NSS + 22) ++#define CKA_NSS_PQG_SEED_BITS (CKA_NSS + 23) ++#define CKA_NSS_MODULE_SPEC (CKA_NSS + 24) ++#define CKA_NSS_OVERRIDE_EXTENSIONS (CKA_NSS + 25) ++ ++#define CKA_NSS_JPAKE_SIGNERID (CKA_NSS + 26) ++#define CKA_NSS_JPAKE_PEERID (CKA_NSS + 27) ++#define CKA_NSS_JPAKE_GX1 (CKA_NSS + 28) ++#define CKA_NSS_JPAKE_GX2 (CKA_NSS + 29) ++#define CKA_NSS_JPAKE_GX3 (CKA_NSS + 30) ++#define CKA_NSS_JPAKE_GX4 (CKA_NSS + 31) ++#define CKA_NSS_JPAKE_X2 (CKA_NSS + 32) ++#define CKA_NSS_JPAKE_X2S (CKA_NSS + 33) ++ ++#define CKA_NSS_MOZILLA_CA_POLICY (CKA_NSS + 34) ++#define CKA_NSS_SERVER_DISTRUST_AFTER (CKA_NSS + 35) ++#define CKA_NSS_EMAIL_DISTRUST_AFTER (CKA_NSS + 36) ++ ++/* ++ * Trust attributes: ++ * ++ * If trust goes standard, these probably will too. So I'll ++ * put them all in one place. ++ */ ++ ++#define CKA_TRUST (CKA_NSS + 0x2000) ++ ++/* "Usage" key information */ ++#define CKA_TRUST_DIGITAL_SIGNATURE (CKA_TRUST + 1) ++#define CKA_TRUST_NON_REPUDIATION (CKA_TRUST + 2) ++#define CKA_TRUST_KEY_ENCIPHERMENT (CKA_TRUST + 3) ++#define CKA_TRUST_DATA_ENCIPHERMENT (CKA_TRUST + 4) ++#define CKA_TRUST_KEY_AGREEMENT (CKA_TRUST + 5) ++#define CKA_TRUST_KEY_CERT_SIGN (CKA_TRUST + 6) ++#define CKA_TRUST_CRL_SIGN (CKA_TRUST + 7) ++ ++/* "Purpose" trust information */ ++#define CKA_TRUST_SERVER_AUTH (CKA_TRUST + 8) ++#define CKA_TRUST_CLIENT_AUTH (CKA_TRUST + 9) ++#define CKA_TRUST_CODE_SIGNING (CKA_TRUST + 10) ++#define CKA_TRUST_EMAIL_PROTECTION (CKA_TRUST + 11) ++#define CKA_TRUST_IPSEC_END_SYSTEM (CKA_TRUST + 12) ++#define CKA_TRUST_IPSEC_TUNNEL (CKA_TRUST + 13) ++#define CKA_TRUST_IPSEC_USER (CKA_TRUST + 14) ++#define CKA_TRUST_TIME_STAMPING (CKA_TRUST + 15) ++#define CKA_TRUST_STEP_UP_APPROVED (CKA_TRUST + 16) ++ ++#define CKA_CERT_SHA1_HASH (CKA_TRUST + 100) ++#define CKA_CERT_MD5_HASH (CKA_TRUST + 101) ++ ++/* NSS trust stuff */ ++ ++/* HISTORICAL: define used to pass in the database key for DSA private keys */ ++#define CKA_NSS_DB 0xD5A0DB00L ++#define CKA_NSS_TRUST 0x80000001L ++ ++/* FAKE PKCS #11 defines */ ++#define CKM_FAKE_RANDOM 0x80000efeUL ++#define CKM_INVALID_MECHANISM 0xffffffffUL ++#define CKT_INVALID_TYPE 0xffffffffUL ++ ++/* ++ * NSS-defined crypto mechanisms ++ * ++ */ ++#define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS) ++ ++#define CKM_NSS_AES_KEY_WRAP (CKM_NSS + 1) ++#define CKM_NSS_AES_KEY_WRAP_PAD (CKM_NSS + 2) ++ ++/* HKDF key derivation mechanisms. See CK_NSS_HKDFParams for documentation. */ ++#define CKM_NSS_HKDF_SHA1 (CKM_NSS + 3) ++#define CKM_NSS_HKDF_SHA256 (CKM_NSS + 4) ++#define CKM_NSS_HKDF_SHA384 (CKM_NSS + 5) ++#define CKM_NSS_HKDF_SHA512 (CKM_NSS + 6) ++ ++/* J-PAKE round 1 key generation mechanisms. ++ * ++ * Required template attributes: CKA_PRIME, CKA_SUBPRIME, CKA_BASE, ++ * CKA_NSS_JPAKE_SIGNERID ++ * Output key type: CKK_NSS_JPAKE_ROUND1 ++ * Output key class: CKO_PRIVATE_KEY ++ * Parameter type: CK_NSS_JPAKERound1Params ++ * ++ */ ++#define CKM_NSS_JPAKE_ROUND1_SHA1 (CKM_NSS + 7) ++#define CKM_NSS_JPAKE_ROUND1_SHA256 (CKM_NSS + 8) ++#define CKM_NSS_JPAKE_ROUND1_SHA384 (CKM_NSS + 9) ++#define CKM_NSS_JPAKE_ROUND1_SHA512 (CKM_NSS + 10) ++ ++/* J-PAKE round 2 key derivation mechanisms. ++ * ++ * Required template attributes: CKA_NSS_JPAKE_PEERID ++ * Input key type: CKK_NSS_JPAKE_ROUND1 ++ * Output key type: CKK_NSS_JPAKE_ROUND2 ++ * Output key class: CKO_PRIVATE_KEY ++ * Parameter type: CK_NSS_JPAKERound2Params ++ */ ++#define CKM_NSS_JPAKE_ROUND2_SHA1 (CKM_NSS + 11) ++#define CKM_NSS_JPAKE_ROUND2_SHA256 (CKM_NSS + 12) ++#define CKM_NSS_JPAKE_ROUND2_SHA384 (CKM_NSS + 13) ++#define CKM_NSS_JPAKE_ROUND2_SHA512 (CKM_NSS + 14) ++ ++/* J-PAKE final key material derivation mechanisms ++ * ++ * Input key type: CKK_NSS_JPAKE_ROUND2 ++ * Output key type: CKK_GENERIC_SECRET ++ * Output key class: CKO_SECRET_KEY ++ * Parameter type: CK_NSS_JPAKEFinalParams ++ * ++ * You must apply a KDF (e.g. CKM_NSS_HKDF_*) to resultant keying material ++ * to get a key with uniformly distributed bits. ++ */ ++#define CKM_NSS_JPAKE_FINAL_SHA1 (CKM_NSS + 15) ++#define CKM_NSS_JPAKE_FINAL_SHA256 (CKM_NSS + 16) ++#define CKM_NSS_JPAKE_FINAL_SHA384 (CKM_NSS + 17) ++#define CKM_NSS_JPAKE_FINAL_SHA512 (CKM_NSS + 18) ++ ++/* Constant-time MAC mechanisms: ++ * ++ * These operations verify a padded, MAC-then-encrypt block of data in ++ * constant-time. Because of the order of operations, the padding bytes are not ++ * protected by the MAC. However, disclosing the value of the padding bytes ++ * gives an attacker the ability to decrypt ciphertexts. Such disclosure can be ++ * as subtle as taking slightly less time to perform the MAC when the padding ++ * is one byte longer. See https://www.isg.rhul.ac.uk/tls/ ++ * ++ * CKM_NSS_HMAC_CONSTANT_TIME: performs an HMAC authentication. ++ * CKM_NSS_SSL3_MAC_CONSTANT_TIME: performs an authentication with SSLv3 MAC. ++ * ++ * Parameter type: CK_NSS_MAC_CONSTANT_TIME_PARAMS ++ */ ++#define CKM_NSS_HMAC_CONSTANT_TIME (CKM_NSS + 19) ++#define CKM_NSS_SSL3_MAC_CONSTANT_TIME (CKM_NSS + 20) ++ ++/* TLS 1.2 mechanisms */ ++#define CKM_NSS_TLS_PRF_GENERAL_SHA256 (CKM_NSS + 21) ++#define CKM_NSS_TLS_MASTER_KEY_DERIVE_SHA256 (CKM_NSS + 22) ++#define CKM_NSS_TLS_KEY_AND_MAC_DERIVE_SHA256 (CKM_NSS + 23) ++#define CKM_NSS_TLS_MASTER_KEY_DERIVE_DH_SHA256 (CKM_NSS + 24) ++ ++/* TLS extended master secret derivation */ ++#define CKM_NSS_TLS_EXTENDED_MASTER_KEY_DERIVE (CKM_NSS + 25) ++#define CKM_NSS_TLS_EXTENDED_MASTER_KEY_DERIVE_DH (CKM_NSS + 26) ++ ++#define CKM_NSS_CHACHA20_KEY_GEN (CKM_NSS + 27) ++#define CKM_NSS_CHACHA20_POLY1305 (CKM_NSS + 28) ++ ++/* Additional PKCS #12 PBE algorithms defined in v1.1 */ ++#define CKM_NSS_PKCS12_PBE_SHA224_HMAC_KEY_GEN (CKM_NSS + 29) ++#define CKM_NSS_PKCS12_PBE_SHA256_HMAC_KEY_GEN (CKM_NSS + 30) ++#define CKM_NSS_PKCS12_PBE_SHA384_HMAC_KEY_GEN (CKM_NSS + 31) ++#define CKM_NSS_PKCS12_PBE_SHA512_HMAC_KEY_GEN (CKM_NSS + 32) ++ ++#define CKM_NSS_CHACHA20_CTR (CKM_NSS + 33) ++ ++/* IKE mechanism (to be proposed to PKCS #11 */ ++#define CKM_NSS_IKE_PRF_PLUS_DERIVE (CKM_NSS + 34) ++#define CKM_NSS_IKE_PRF_DERIVE (CKM_NSS + 35) ++#define CKM_NSS_IKE1_PRF_DERIVE (CKM_NSS + 36) ++#define CKM_NSS_IKE1_APP_B_PRF_DERIVE (CKM_NSS + 37) ++ ++#define CKM_NSS_PUB_FROM_PRIV (CKM_NSS + 40) ++ ++/* SP800-108 NSS mechanism with support for data object derivation */ ++#define CKM_NSS_SP800_108_COUNTER_KDF_DERIVE_DATA (CKM_NSS + 42) ++#define CKM_NSS_SP800_108_FEEDBACK_KDF_DERIVE_DATA (CKM_NSS + 43) ++#define CKM_NSS_SP800_108_DOUBLE_PIPELINE_KDF_DERIVE_DATA (CKM_NSS + 44) ++ ++/* ++ * HISTORICAL: ++ * Do not attempt to use these. They are only used by NSS's internal ++ * PKCS #11 interface. Most of these are place holders for other mechanism ++ * and will change in the future. ++ */ ++#define CKM_NSS_PBE_SHA1_DES_CBC 0x80000002UL ++#define CKM_NSS_PBE_SHA1_TRIPLE_DES_CBC 0x80000003UL ++#define CKM_NSS_PBE_SHA1_40_BIT_RC2_CBC 0x80000004UL ++#define CKM_NSS_PBE_SHA1_128_BIT_RC2_CBC 0x80000005UL ++#define CKM_NSS_PBE_SHA1_40_BIT_RC4 0x80000006UL ++#define CKM_NSS_PBE_SHA1_128_BIT_RC4 0x80000007UL ++#define CKM_NSS_PBE_SHA1_FAULTY_3DES_CBC 0x80000008UL ++#define CKM_NSS_PBE_SHA1_HMAC_KEY_GEN 0x80000009UL ++#define CKM_NSS_PBE_MD5_HMAC_KEY_GEN 0x8000000aUL ++#define CKM_NSS_PBE_MD2_HMAC_KEY_GEN 0x8000000bUL ++ ++#define CKM_TLS_PRF_GENERAL 0x80000373UL ++ ++typedef struct CK_NSS_JPAKEPublicValue { ++ CK_BYTE *pGX; ++ CK_ULONG ulGXLen; ++ CK_BYTE *pGV; ++ CK_ULONG ulGVLen; ++ CK_BYTE *pR; ++ CK_ULONG ulRLen; ++} CK_NSS_JPAKEPublicValue; ++ ++typedef struct CK_NSS_JPAKERound1Params { ++ CK_NSS_JPAKEPublicValue gx1; /* out */ ++ CK_NSS_JPAKEPublicValue gx2; /* out */ ++} CK_NSS_JPAKERound1Params; ++ ++typedef struct CK_NSS_JPAKERound2Params { ++ CK_BYTE *pSharedKey; /* in */ ++ CK_ULONG ulSharedKeyLen; /* in */ ++ CK_NSS_JPAKEPublicValue gx3; /* in */ ++ CK_NSS_JPAKEPublicValue gx4; /* in */ ++ CK_NSS_JPAKEPublicValue A; /* out */ ++} CK_NSS_JPAKERound2Params; ++ ++typedef struct CK_NSS_JPAKEFinalParams { ++ CK_NSS_JPAKEPublicValue B; /* in */ ++} CK_NSS_JPAKEFinalParams; ++ ++/* macAlg: the MAC algorithm to use. This determines the hash function used in ++ * the HMAC/SSLv3 MAC calculations. ++ * ulBodyTotalLen: the total length of the data, including padding bytes and ++ * padding length. ++ * pHeader: points to a block of data that contains additional data to ++ * authenticate. For TLS this includes the sequence number etc. For SSLv3, ++ * this also includes the initial padding bytes. ++ * ++ * NOTE: the softoken's implementation of CKM_NSS_HMAC_CONSTANT_TIME and ++ * CKM_NSS_SSL3_MAC_CONSTANT_TIME requires that the sum of ulBodyTotalLen ++ * and ulHeaderLen be much smaller than 2^32 / 8 bytes because it uses an ++ * unsigned int variable to represent the length in bits. This should not ++ * be a problem because the SSL/TLS protocol limits the size of an SSL ++ * record to something considerably less than 2^32 bytes. ++ */ ++typedef struct CK_NSS_MAC_CONSTANT_TIME_PARAMS { ++ CK_MECHANISM_TYPE macAlg; /* in */ ++ CK_ULONG ulBodyTotalLen; /* in */ ++ CK_BYTE *pHeader; /* in */ ++ CK_ULONG ulHeaderLen; /* in */ ++} CK_NSS_MAC_CONSTANT_TIME_PARAMS; ++ ++typedef struct CK_NSS_AEAD_PARAMS { ++ CK_BYTE_PTR pNonce; ++ CK_ULONG ulNonceLen; ++ CK_BYTE_PTR pAAD; ++ CK_ULONG ulAADLen; ++ CK_ULONG ulTagLen; ++} CK_NSS_AEAD_PARAMS; ++ ++/* ++ * NSS-defined return values ++ * ++ */ ++#define CKR_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS) ++ ++#define CKR_NSS_CERTDB_FAILED (CKR_NSS + 1) ++#define CKR_NSS_KEYDB_FAILED (CKR_NSS + 2) ++ ++/* Mandatory parameter for the CKM_NSS_HKDF_* key deriviation mechanisms. ++ See RFC 5869. ++ ++ bExtract: If set, HKDF-Extract will be applied to the input key. If ++ the optional salt is given, it is used; otherwise, the salt is ++ set to a sequence of zeros equal in length to the HMAC output. ++ If bExpand is not set, then the key template given to ++ C_DeriveKey must indicate an output key size less than or equal ++ to the output size of the HMAC. ++ ++ bExpand: If set, HKDF-Expand will be applied to the input key (if ++ bExtract is not set) or to the result of HKDF-Extract (if ++ bExtract is set). Any info given in the optional pInfo field will ++ be included in the calculation. ++ ++ The size of the output key must be specified in the template passed to ++ C_DeriveKey. ++*/ ++typedef struct CK_NSS_HKDFParams { ++ CK_BBOOL bExtract; ++ CK_BYTE_PTR pSalt; ++ CK_ULONG ulSaltLen; ++ CK_BBOOL bExpand; ++ CK_BYTE_PTR pInfo; ++ CK_ULONG ulInfoLen; ++} CK_NSS_HKDFParams; ++ ++/* ++ * CK_NSS_IKE_PRF_PLUS_PARAMS is a structure that provides the parameters to ++ * the CKM_NSS_IKE_PRF_PLUS_DERIVE mechanism. ++ * The fields of the structure have the following meanings: ++ * prfMechanism underlying MAC mechanism used to generate the prf. ++ * bHasSeedKey hSeed key is present. ++ * hSeedKey optional seed from key ++ * pSeedData optional seed from data. ++ * ulSeedDataLen length of optional seed data. ++ * If no seed data is present this value is NULL. ++ */ ++typedef struct CK_NSS_IKE_PRF_PLUS_DERIVE_PARAMS { ++ CK_MECHANISM_TYPE prfMechanism; ++ CK_BBOOL bHasSeedKey; ++ CK_OBJECT_HANDLE hSeedKey; ++ CK_BYTE_PTR pSeedData; ++ CK_ULONG ulSeedDataLen; ++} CK_NSS_IKE_PRF_PLUS_DERIVE_PARAMS; ++ ++/* CK_NSS_IKE_PRF_DERIVE_PARAMS is a structure that provides the parameters to ++ * the CKM_NSS_IKE_PRF_DERIVE mechanism. ++ * ++ * The fields of the structure have the following meanings: ++ * prfMechanism underlying MAC mechanism used to generate the prf. ++ * bRekey hNewKey is present. ++ * pNi Ni value ++ * ulNiLen length of Ni ++ * pNr Nr value ++ * ulNrLen length of Nr ++ * hNewKey New key value to drive the rekey. ++ */ ++typedef struct CK_NSS_IKE_PRF_DERIVE_PARAMS { ++ CK_MECHANISM_TYPE prfMechanism; ++ CK_BBOOL bDataAsKey; ++ CK_BBOOL bRekey; ++ CK_BYTE_PTR pNi; ++ CK_ULONG ulNiLen; ++ CK_BYTE_PTR pNr; ++ CK_ULONG ulNrLen; ++ CK_OBJECT_HANDLE hNewKey; ++} CK_NSS_IKE_PRF_DERIVE_PARAMS; ++ ++/* CK_NSS_IKE1_PRF_DERIVE_PARAMS is a structure that provides the parameters ++ * to the CKM_NSS_IKE_PRF_DERIVE mechanism. ++ * ++ * The fields of the structure have the following meanings: ++ * prfMechanism underlying MAC mechanism used to generate the prf. ++ * bRekey hNewKey is present. ++ * pCKYi CKYi value ++ * ulCKYiLen length of CKYi ++ * pCKYr CKYr value ++ * ulCKYrLen length of CKYr ++ * hNewKey New key value to drive the rekey. ++ */ ++typedef struct CK_NSS_IKE1_PRF_DERIVE_PARAMS { ++ CK_MECHANISM_TYPE prfMechanism; ++ CK_BBOOL bHasPrevKey; ++ CK_OBJECT_HANDLE hKeygxy; ++ CK_OBJECT_HANDLE hPrevKey; ++ CK_BYTE_PTR pCKYi; ++ CK_ULONG ulCKYiLen; ++ CK_BYTE_PTR pCKYr; ++ CK_ULONG ulCKYrLen; ++ CK_BYTE keyNumber; ++} CK_NSS_IKE1_PRF_DERIVE_PARAMS; ++ ++/* CK_NSS_IKE1_APP_B_PRF_DERIVE_PARAMS is a structure that provides the ++ * parameters to the CKM_NSS_IKE_APP_B_PRF_DERIVE mechanism. ++ * ++ * The fields of the structure have the following meanings: ++ * prfMechanism underlying MAC mechanism used to generate the prf. ++ * bHasKeygxy hKeygxy exists ++ * hKeygxy optional key to hash in the prf ++ * pExtraData optional extra data to hash in the prf ++ * ulExtraData length of the optional extra data. ++ * ++ * CK_NSS_IKE_APP_B_PRF_DERIVE can take wither CK_NSS_IKE1_APP_B_PRF_DRIVE_PARAMS ++ * or a single CK_MECHANISM_TYPE. In the latter cases bHashKeygx is assumed to ++ * be false and ulExtraDataLen is assumed to be '0'. ++ */ ++typedef struct CK_NSS_IKE1_APP_B_PRF_DERIVE_PARAMS { ++ CK_MECHANISM_TYPE prfMechanism; ++ CK_BBOOL bHasKeygxy; ++ CK_OBJECT_HANDLE hKeygxy; ++ CK_BYTE_PTR pExtraData; ++ CK_ULONG ulExtraDataLen; ++} CK_NSS_IKE1_APP_B_PRF_DERIVE_PARAMS; ++ ++/* ++ * Parameter for the TLS extended master secret key derivation mechanisms: ++ * ++ * * CKM_NSS_TLS_EXTENDED_MASTER_KEY_DERIVE ++ * * CKM_NSS_TLS_EXTENDED_MASTER_KEY_DERIVE_DH ++ * ++ * For the TLS 1.2 PRF, the prfHashMechanism parameter determines the hash ++ * function used. For earlier versions of the PRF, set the prfHashMechanism ++ * value to CKM_TLS_PRF. ++ * ++ * The session hash input is expected to be the output of the same hash ++ * function as the PRF uses (as required by draft-ietf-tls-session-hash). So ++ * the ulSessionHashLen member must be equal the output length of the hash ++ * function specified by the prfHashMechanism member (or, for pre-TLS 1.2 PRF, ++ * the length of concatenated MD5 and SHA-1 digests). ++ * ++ */ ++typedef struct CK_NSS_TLS_EXTENDED_MASTER_KEY_DERIVE_PARAMS { ++ CK_MECHANISM_TYPE prfHashMechanism; ++ CK_BYTE_PTR pSessionHash; ++ CK_ULONG ulSessionHashLen; ++ CK_VERSION_PTR pVersion; ++} CK_NSS_TLS_EXTENDED_MASTER_KEY_DERIVE_PARAMS; ++ ++/* ++ * Trust info ++ * ++ * This isn't part of the Cryptoki standard (yet), so I'm putting ++ * all the definitions here. Some of this would move to nssckt.h ++ * if trust info were made part of the standard. In view of this ++ * possibility, I'm putting my (NSS) values in the NSS ++ * vendor space, like everything else. ++ */ ++ ++typedef CK_ULONG CK_TRUST; ++ ++/* The following trust types are defined: */ ++#define CKT_VENDOR_DEFINED 0x80000000 ++ ++#define CKT_NSS (CKT_VENDOR_DEFINED | NSSCK_VENDOR_NSS) ++ ++/* If trust goes standard, these'll probably drop out of vendor space. */ ++#define CKT_NSS_TRUSTED (CKT_NSS + 1) ++#define CKT_NSS_TRUSTED_DELEGATOR (CKT_NSS + 2) ++#define CKT_NSS_MUST_VERIFY_TRUST (CKT_NSS + 3) ++#define CKT_NSS_NOT_TRUSTED (CKT_NSS + 10) ++#define CKT_NSS_TRUST_UNKNOWN (CKT_NSS + 5) /* default */ ++ ++/* ++ * These may well remain NSS-specific; I'm only using them ++ * to cache resolution data. ++ */ ++#define CKT_NSS_VALID_DELEGATOR (CKT_NSS + 11) ++ ++/* ++ * old definitions. They still exist, but the plain meaning of the ++ * labels have never been accurate to what was really implemented. ++ * The new labels correctly reflect what the values effectively mean. ++ */ ++#if defined(__GNUC__) && (__GNUC__ > 3) ++/* make GCC warn when we use these #defines */ ++/* ++ * This is really painful because GCC doesn't allow us to mark random ++ * #defines as deprecated. We can only mark the following: ++ * functions, variables, and types. ++ * const variables will create extra storage for everyone including this ++ * header file, so it's undesirable. ++ * functions could be inlined to prevent storage creation, but will fail ++ * when constant values are expected (like switch statements). ++ * enum types do not seem to pay attention to the deprecated attribute. ++ * ++ * That leaves typedefs. We declare new types that we then deprecate, then ++ * cast the resulting value to the deprecated type in the #define, thus ++ * producting the warning when the #define is used. ++ */ ++#if (__GNUC__ == 4) && (__GNUC_MINOR__ < 5) ++/* The mac doesn't like the friendlier deprecate messages. I'm assuming this ++ * is a gcc version issue rather than mac or ppc specific */ ++typedef CK_TRUST __CKT_NSS_UNTRUSTED __attribute__((deprecated)); ++typedef CK_TRUST __CKT_NSS_VALID __attribute__((deprecated)); ++typedef CK_TRUST __CKT_NSS_MUST_VERIFY __attribute__((deprecated)); ++#else ++/* when possible, get a full deprecation warning. This works on gcc 4.5 ++ * it may work on earlier versions of gcc */ ++typedef CK_TRUST __CKT_NSS_UNTRUSTED __attribute__((deprecated("CKT_NSS_UNTRUSTED really means CKT_NSS_MUST_VERIFY_TRUST"))); ++typedef CK_TRUST __CKT_NSS_VALID __attribute__((deprecated("CKT_NSS_VALID really means CKT_NSS_NOT_TRUSTED"))); ++typedef CK_TRUST __CKT_NSS_MUST_VERIFY __attribute__((deprecated("CKT_NSS_MUST_VERIFY really functions as CKT_NSS_TRUST_UNKNOWN"))); ++#endif ++#define CKT_NSS_UNTRUSTED ((__CKT_NSS_UNTRUSTED)CKT_NSS_MUST_VERIFY_TRUST) ++#define CKT_NSS_VALID ((__CKT_NSS_VALID)CKT_NSS_NOT_TRUSTED) ++/* keep the old value for compatibility reasons*/ ++#define CKT_NSS_MUST_VERIFY ((__CKT_NSS_MUST_VERIFY)(CKT_NSS + 4)) ++#else ++#ifdef _WIN32 ++/* This magic gets the windows compiler to give us a deprecation ++ * warning */ ++#pragma deprecated(CKT_NSS_UNTRUSTED, CKT_NSS_MUST_VERIFY, CKT_NSS_VALID) ++#endif ++/* CKT_NSS_UNTRUSTED really means CKT_NSS_MUST_VERIFY_TRUST */ ++#define CKT_NSS_UNTRUSTED CKT_NSS_MUST_VERIFY_TRUST ++/* CKT_NSS_VALID really means CKT_NSS_NOT_TRUSTED */ ++#define CKT_NSS_VALID CKT_NSS_NOT_TRUSTED ++/* CKT_NSS_MUST_VERIFY was always treated as CKT_NSS_TRUST_UNKNOWN */ ++#define CKT_NSS_MUST_VERIFY (CKT_NSS + 4) /*really means trust unknown*/ ++#endif ++ ++/* ++ * These are not really PKCS #11 values specifically. They are the 'loadable' ++ * module spec NSS uses. They are available for others to use as well, but not ++ * part of the formal PKCS #11 spec. ++ * ++ * The function 'FIND' returns an array of PKCS #11 initialization strings ++ * The function 'ADD' takes a PKCS #11 initialization string and stores it. ++ * The function 'DEL' takes a 'name= library=' value and deletes the associated ++ * string. ++ * The function 'RELEASE' frees the array returned by 'FIND' ++ */ ++#define SECMOD_MODULE_DB_FUNCTION_FIND 0 ++#define SECMOD_MODULE_DB_FUNCTION_ADD 1 ++#define SECMOD_MODULE_DB_FUNCTION_DEL 2 ++#define SECMOD_MODULE_DB_FUNCTION_RELEASE 3 ++typedef char **(PR_CALLBACK *SECMODModuleDBFunc)(unsigned long function, ++ char *parameters, void *moduleSpec); ++ ++/* softoken slot ID's */ ++#define SFTK_MIN_USER_SLOT_ID 4 ++#define SFTK_MAX_USER_SLOT_ID 100 ++#define SFTK_MIN_FIPS_USER_SLOT_ID 101 ++#define SFTK_MAX_FIPS_USER_SLOT_ID 127 ++ ++/* Module Interface. This is the old NSS private module interface, now exported ++ * as a PKCS #11 v3 interface. It's interface name is ++ * "Vendor NSS Module Interface" */ ++typedef char **(*CK_NSS_ModuleDBFunc)(unsigned long function, ++ char *parameters, void *args); ++typedef struct CK_NSS_MODULE_FUNCTIONS { ++ CK_VERSION version; ++ CK_NSS_ModuleDBFunc NSC_ModuleDBFunc; ++} CK_NSS_MODULE_FUNCTIONS; ++ ++/* There was an inconsistency between the spec and the header file in defining ++ * the CK_GCM_PARAMS structure. The authoritative reference is the header file, ++ * but NSS used the spec when adding it to its own header. In V3 we've ++ * corrected it, but we need to handle the old case for devices that followed ++ * us in using the incorrect specification. */ ++typedef struct CK_NSS_GCM_PARAMS { ++ CK_BYTE_PTR pIv; ++ CK_ULONG ulIvLen; ++ CK_BYTE_PTR pAAD; ++ CK_ULONG ulAADLen; ++ CK_ULONG ulTagBits; ++} CK_NSS_GCM_PARAMS; ++ ++typedef CK_NSS_GCM_PARAMS CK_PTR CK_NSS_GCM_PARAMS_PTR; ++ ++/* deprecated #defines. Drop in future NSS releases */ ++#ifdef NSS_PKCS11_2_0_COMPAT ++ ++/* defines that were changed between NSS's PKCS #11 and the Oasis headers */ ++#define CKF_EC_FP CKF_EC_F_P ++#define CKO_KG_PARAMETERS CKO_DOMAIN_PARAMETERS ++#define CK_INVALID_SESSION CK_INVALID_HANDLE ++#define CKR_KEY_PARAMS_INVALID 0x0000006B ++ ++/* use the old wrong CK_GCM_PARAMS is NSS_PCKS11_2_0_COMPAT is defined */ ++typedef struct CK_NSS_GCM_PARAMS CK_GCM_PARAMS; ++typedef CK_NSS_GCM_PARAMS CK_PTR CK_GCM_PARAMS_PTR; ++ ++/* don't leave old programs in a lurch just yet, give them the old NETSCAPE ++ * synonym if NSS_PKCS11_2_0_COMPAT is defined*/ ++#define CKO_NETSCAPE_CRL CKO_NSS_CRL ++#define CKO_NETSCAPE_SMIME CKO_NSS_SMIME ++#define CKO_NETSCAPE_TRUST CKO_NSS_TRUST ++#define CKO_NETSCAPE_BUILTIN_ROOT_LIST CKO_NSS_BUILTIN_ROOT_LIST ++#define CKO_NETSCAPE_NEWSLOT CKO_NSS_NEWSLOT ++#define CKO_NETSCAPE_DELSLOT CKO_NSS_DELSLOT ++#define CKK_NETSCAPE_PKCS8 CKK_NSS_PKCS8 ++#define CKA_NETSCAPE_URL CKA_NSS_URL ++#define CKA_NETSCAPE_EMAIL CKA_NSS_EMAIL ++#define CKA_NETSCAPE_SMIME_INFO CKA_NSS_SMIME_INFO ++#define CKA_NETSCAPE_SMIME_TIMESTAMP CKA_NSS_SMIME_TIMESTAMP ++#define CKA_NETSCAPE_PKCS8_SALT CKA_NSS_PKCS8_SALT ++#define CKA_NETSCAPE_PASSWORD_CHECK CKA_NSS_PASSWORD_CHECK ++#define CKA_NETSCAPE_EXPIRES CKA_NSS_EXPIRES ++#define CKA_NETSCAPE_KRL CKA_NSS_KRL ++#define CKA_NETSCAPE_PQG_COUNTER CKA_NSS_PQG_COUNTER ++#define CKA_NETSCAPE_PQG_SEED CKA_NSS_PQG_SEED ++#define CKA_NETSCAPE_PQG_H CKA_NSS_PQG_H ++#define CKA_NETSCAPE_PQG_SEED_BITS CKA_NSS_PQG_SEED_BITS ++#define CKA_NETSCAPE_MODULE_SPEC CKA_NSS_MODULE_SPEC ++#define CKA_NETSCAPE_DB CKA_NSS_DB ++#define CKA_NETSCAPE_TRUST CKA_NSS_TRUST ++#define CKM_NETSCAPE_AES_KEY_WRAP CKM_NSS_AES_KEY_WRAP ++#define CKM_NETSCAPE_AES_KEY_WRAP_PAD CKM_NSS_AES_KEY_WRAP_PAD ++#define CKM_NETSCAPE_PBE_SHA1_DES_CBC CKM_NSS_PBE_SHA1_DES_CBC ++#define CKM_NETSCAPE_PBE_SHA1_TRIPLE_DES_CBC CKM_NSS_PBE_SHA1_TRIPLE_DES_CBC ++#define CKM_NETSCAPE_PBE_SHA1_40_BIT_RC2_CBC CKM_NSS_PBE_SHA1_40_BIT_RC2_CBC ++#define CKM_NETSCAPE_PBE_SHA1_128_BIT_RC2_CBC CKM_NSS_PBE_SHA1_128_BIT_RC2_CBC ++#define CKM_NETSCAPE_PBE_SHA1_40_BIT_RC4 CKM_NSS_PBE_SHA1_40_BIT_RC4 ++#define CKM_NETSCAPE_PBE_SHA1_128_BIT_RC4 CKM_NSS_PBE_SHA1_128_BIT_RC4 ++#define CKM_NETSCAPE_PBE_SHA1_FAULTY_3DES_CBC CKM_NSS_PBE_SHA1_FAULTY_3DES_CBC ++#define CKM_NETSCAPE_PBE_SHA1_HMAC_KEY_GEN CKM_NSS_PBE_SHA1_HMAC_KEY_GEN ++#define CKM_NETSCAPE_PBE_MD5_HMAC_KEY_GEN CKM_NSS_PBE_MD5_HMAC_KEY_GEN ++#define CKM_NETSCAPE_PBE_MD2_HMAC_KEY_GEN CKM_NSS_PBE_MD2_HMAC_KEY_GEN ++#define CKR_NETSCAPE_CERTDB_FAILED CKR_NSS_CERTDB_FAILED ++#define CKR_NETSCAPE_KEYDB_FAILED CKR_NSS_KEYDB_FAILED ++ ++#define CKT_NETSCAPE_TRUSTED CKT_NSS_TRUSTED ++#define CKT_NETSCAPE_TRUSTED_DELEGATOR CKT_NSS_TRUSTED_DELEGATOR ++#define CKT_NETSCAPE_UNTRUSTED CKT_NSS_UNTRUSTED ++#define CKT_NETSCAPE_MUST_VERIFY CKT_NSS_MUST_VERIFY ++#define CKT_NETSCAPE_TRUST_UNKNOWN CKT_NSS_TRUST_UNKNOWN ++#define CKT_NETSCAPE_VALID CKT_NSS_VALID ++#define CKT_NETSCAPE_VALID_DELEGATOR CKT_NSS_VALID_DELEGATOR ++#else ++/* use the new CK_GCM_PARAMS if NSS_PKCS11_2_0_COMPAT is not defined */ ++typedef struct CK_GCM_PARAMS_V3 CK_GCM_PARAMS; ++typedef CK_GCM_PARAMS_V3 CK_PTR CK_GCM_PARAMS_PTR; ++#endif ++ ++#endif /* _PKCS11N_H_ */ +--- a/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11t.h ++++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11t.h +@@ -1,1150 +1,1265 @@ +-/* Copyright (c) OASIS Open 2016, 2019. All Rights Reserved./ +- * /Distributed under the terms of the OASIS IPR Policy, +- * [http://www.oasis-open.org/policies-guidelines/ipr], AS-IS, WITHOUT ANY +- * IMPLIED OR EXPRESS WARRANTY; there is no warranty of MERCHANTABILITY, FITNESS FOR A +- * PARTICULAR PURPOSE or NONINFRINGEMENT of the rights of others. +- */ +- +-/* Latest version of the specification: +- * http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/pkcs11-base-v2.40.html +- */ +- +-/* See top of pkcs11.h for information about the macros that +- * must be defined and the structure-packing conventions that +- * must be set before including this file. ++/* This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ ++/* License to copy and use this software is granted provided that it is ++ * identified as "RSA Security Inc. PKCS #11 Cryptographic Token Interface ++ * (Cryptoki)" in all material mentioning or referencing this software. ++ ++ * License is also granted to make and use derivative works provided that ++ * such works are identified as "derived from the RSA Security Inc. PKCS #11 ++ * Cryptographic Token Interface (Cryptoki)" in all material mentioning or ++ * referencing the derived work. ++ ++ * RSA Security Inc. makes no representations concerning either the ++ * merchantability of this software or the suitability of this software for ++ * any particular purpose. It is provided "as is" without express or implied ++ * warranty of any kind. + */ + + #ifndef _PKCS11T_H_ + #define _PKCS11T_H_ 1 + +-#define CRYPTOKI_VERSION_MAJOR 3 +-#define CRYPTOKI_VERSION_MINOR 0 +-#define CRYPTOKI_VERSION_AMENDMENT 0 +- +-#define CK_TRUE 1 +-#define CK_FALSE 0 +- +-#ifndef CK_DISABLE_TRUE_FALSE +-#ifndef FALSE +-#define FALSE CK_FALSE +-#endif +-#ifndef TRUE +-#define TRUE CK_TRUE +-#endif ++#define CK_TRUE 1 ++#define CK_FALSE 0 ++ ++#include "prtypes.h" ++ ++#define CK_PTR * ++#define CK_NULL_PTR 0 ++#define CK_CALLBACK_FUNCTION(rtype, func) rtype(PR_CALLBACK *func) ++#define CK_DECLARE_FUNCTION(rtype, func) extern rtype func ++#define CK_DECLARE_FUNCTION_POINTER(rtype, func) rtype(PR_CALLBACK *func) ++ ++#ifdef NSS_PCKS11_2_0_COMPAT ++#define prfHashMechanism prfMechanism + #endif + ++#define CRYPTOKI_VERSION_MAJOR 3 ++#define CRYPTOKI_VERSION_MINOR 0 ++#define CRYPTOKI_VERSION_AMENDMENT 0 ++ + /* an unsigned 8-bit value */ +-typedef unsigned char CK_BYTE; ++typedef unsigned char CK_BYTE; + + /* an unsigned 8-bit character */ +-typedef CK_BYTE CK_CHAR; ++typedef CK_BYTE CK_CHAR; + + /* an 8-bit UTF-8 character */ +-typedef CK_BYTE CK_UTF8CHAR; ++typedef CK_BYTE CK_UTF8CHAR; + + /* a BYTE-sized Boolean flag */ +-typedef CK_BYTE CK_BBOOL; ++typedef CK_BYTE CK_BBOOL; + + /* an unsigned value, at least 32 bits long */ + typedef unsigned long int CK_ULONG; + + /* a signed value, the same size as a CK_ULONG */ +-typedef long int CK_LONG; ++/* CK_LONG is new for v2.0 */ ++typedef long int CK_LONG; + + /* at least 32 bits; each bit is a Boolean flag */ +-typedef CK_ULONG CK_FLAGS; +- ++typedef CK_ULONG CK_FLAGS; + + /* some special values for certain CK_ULONG variables */ +-#define CK_UNAVAILABLE_INFORMATION (~0UL) +-#define CK_EFFECTIVELY_INFINITE 0UL +- ++#define CK_UNAVAILABLE_INFORMATION (~0UL) ++#define CK_EFFECTIVELY_INFINITE 0 + +-typedef CK_BYTE CK_PTR CK_BYTE_PTR; +-typedef CK_CHAR CK_PTR CK_CHAR_PTR; +-typedef CK_UTF8CHAR CK_PTR CK_UTF8CHAR_PTR; +-typedef CK_ULONG CK_PTR CK_ULONG_PTR; +-typedef void CK_PTR CK_VOID_PTR; ++typedef CK_BYTE CK_PTR CK_BYTE_PTR; ++typedef CK_CHAR CK_PTR CK_CHAR_PTR; ++typedef CK_UTF8CHAR CK_PTR CK_UTF8CHAR_PTR; ++typedef CK_ULONG CK_PTR CK_ULONG_PTR; ++typedef void CK_PTR CK_VOID_PTR; + + /* Pointer to a CK_VOID_PTR-- i.e., pointer to pointer to void */ + typedef CK_VOID_PTR CK_PTR CK_VOID_PTR_PTR; + ++/* The following value is always invalid if used as a session */ ++/* handle or object handle */ ++#define CK_INVALID_HANDLE 0 + +-/* The following value is always invalid if used as a session +- * handle or object handle +- */ +-#define CK_INVALID_HANDLE 0UL +- ++/* pack */ ++// #include "pkcs11p.h" + + typedef struct CK_VERSION { +- CK_BYTE major; /* integer portion of version number */ +- CK_BYTE minor; /* 1/100ths portion of version number */ ++ CK_BYTE major; /* integer portion of version number */ ++ CK_BYTE minor; /* 1/100ths portion of version number */ + } CK_VERSION; + + typedef CK_VERSION CK_PTR CK_VERSION_PTR; + +- + typedef struct CK_INFO { +- CK_VERSION cryptokiVersion; /* Cryptoki interface ver */ +- CK_UTF8CHAR manufacturerID[32]; /* blank padded */ +- CK_FLAGS flags; /* must be zero */ ++ /* manufacturerID and libraryDecription have been changed from ++ * CK_CHAR to CK_UTF8CHAR for v2.10 */ ++ CK_VERSION cryptokiVersion; /* PKCS #11 interface ver */ ++ CK_UTF8CHAR manufacturerID[32]; /* blank padded */ ++ CK_FLAGS flags; /* must be zero */ ++ ++ /* libraryDescription and libraryVersion are new for v2.0 */ + CK_UTF8CHAR libraryDescription[32]; /* blank padded */ +- CK_VERSION libraryVersion; /* version of library */ ++ CK_VERSION libraryVersion; /* version of library */ + } CK_INFO; + +-typedef CK_INFO CK_PTR CK_INFO_PTR; +- ++typedef CK_INFO CK_PTR CK_INFO_PTR; + + /* CK_NOTIFICATION enumerates the types of notifications that +- * Cryptoki provides to an application +- */ ++ * PKCS #11 provides to an application */ ++/* CK_NOTIFICATION has been changed from an enum to a CK_ULONG ++ * for v2.0 */ + typedef CK_ULONG CK_NOTIFICATION; +-#define CKN_SURRENDER 0UL +-#define CKN_OTP_CHANGED 1UL ++#define CKN_SURRENDER 0 + +-typedef CK_ULONG CK_SLOT_ID; ++typedef CK_ULONG CK_SLOT_ID; + + typedef CK_SLOT_ID CK_PTR CK_SLOT_ID_PTR; + +- + /* CK_SLOT_INFO provides information about a slot */ + typedef struct CK_SLOT_INFO { +- CK_UTF8CHAR slotDescription[64]; /* blank padded */ +- CK_UTF8CHAR manufacturerID[32]; /* blank padded */ +- CK_FLAGS flags; ++ /* slotDescription and manufacturerID have been changed from ++ * CK_CHAR to CK_UTF8CHAR for v2.10 */ ++ CK_UTF8CHAR slotDescription[64]; /* blank padded */ ++ CK_UTF8CHAR manufacturerID[32]; /* blank padded */ ++ CK_FLAGS flags; + +- CK_VERSION hardwareVersion; /* version of hardware */ +- CK_VERSION firmwareVersion; /* version of firmware */ ++ /* hardwareVersion and firmwareVersion are new for v2.0 */ ++ CK_VERSION hardwareVersion; /* version of hardware */ ++ CK_VERSION firmwareVersion; /* version of firmware */ + } CK_SLOT_INFO; + + /* flags: bit flags that provide capabilities of the slot + * Bit Flag Mask Meaning + */ +-#define CKF_TOKEN_PRESENT 0x00000001UL /* a token is there */ +-#define CKF_REMOVABLE_DEVICE 0x00000002UL /* removable devices*/ +-#define CKF_HW_SLOT 0x00000004UL /* hardware slot */ ++#define CKF_TOKEN_PRESENT 0x00000001UL /* a token is there */ ++#define CKF_REMOVABLE_DEVICE 0x00000002UL /* removable devices*/ ++#define CKF_HW_SLOT 0x00000004UL /* hardware slot */ + + typedef CK_SLOT_INFO CK_PTR CK_SLOT_INFO_PTR; + +- + /* CK_TOKEN_INFO provides information about a token */ + typedef struct CK_TOKEN_INFO { +- CK_UTF8CHAR label[32]; /* blank padded */ +- CK_UTF8CHAR manufacturerID[32]; /* blank padded */ +- CK_UTF8CHAR model[16]; /* blank padded */ +- CK_CHAR serialNumber[16]; /* blank padded */ +- CK_FLAGS flags; /* see below */ +- +- CK_ULONG ulMaxSessionCount; /* max open sessions */ +- CK_ULONG ulSessionCount; /* sess. now open */ +- CK_ULONG ulMaxRwSessionCount; /* max R/W sessions */ +- CK_ULONG ulRwSessionCount; /* R/W sess. now open */ +- CK_ULONG ulMaxPinLen; /* in bytes */ +- CK_ULONG ulMinPinLen; /* in bytes */ +- CK_ULONG ulTotalPublicMemory; /* in bytes */ +- CK_ULONG ulFreePublicMemory; /* in bytes */ +- CK_ULONG ulTotalPrivateMemory; /* in bytes */ +- CK_ULONG ulFreePrivateMemory; /* in bytes */ +- CK_VERSION hardwareVersion; /* version of hardware */ +- CK_VERSION firmwareVersion; /* version of firmware */ +- CK_CHAR utcTime[16]; /* time */ ++ /* label, manufacturerID, and model have been changed from ++ * CK_CHAR to CK_UTF8CHAR for v2.10 */ ++ CK_UTF8CHAR label[32]; /* blank padded */ ++ CK_UTF8CHAR manufacturerID[32]; /* blank padded */ ++ CK_UTF8CHAR model[16]; /* blank padded */ ++ CK_CHAR serialNumber[16]; /* blank padded */ ++ CK_FLAGS flags; /* see below */ ++ ++ /* ulMaxSessionCount, ulSessionCount, ulMaxRwSessionCount, ++ * ulRwSessionCount, ulMaxPinLen, and ulMinPinLen have all been ++ * changed from CK_USHORT to CK_ULONG for v2.0 */ ++ CK_ULONG ulMaxSessionCount; /* max open sessions */ ++ CK_ULONG ulSessionCount; /* sess. now open */ ++ CK_ULONG ulMaxRwSessionCount; /* max R/W sessions */ ++ CK_ULONG ulRwSessionCount; /* R/W sess. now open */ ++ CK_ULONG ulMaxPinLen; /* in bytes */ ++ CK_ULONG ulMinPinLen; /* in bytes */ ++ CK_ULONG ulTotalPublicMemory; /* in bytes */ ++ CK_ULONG ulFreePublicMemory; /* in bytes */ ++ CK_ULONG ulTotalPrivateMemory; /* in bytes */ ++ CK_ULONG ulFreePrivateMemory; /* in bytes */ ++ ++ /* hardwareVersion, firmwareVersion, and time are new for ++ * v2.0 */ ++ CK_VERSION hardwareVersion; /* version of hardware */ ++ CK_VERSION firmwareVersion; /* version of firmware */ ++ CK_CHAR utcTime[16]; /* time */ + } CK_TOKEN_INFO; + + /* The flags parameter is defined as follows: + * Bit Flag Mask Meaning + */ +-#define CKF_RNG 0x00000001UL /* has random # generator */ +-#define CKF_WRITE_PROTECTED 0x00000002UL /* token is write-protected */ +-#define CKF_LOGIN_REQUIRED 0x00000004UL /* user must login */ +-#define CKF_USER_PIN_INITIALIZED 0x00000008UL /* normal user's PIN is set */ ++#define CKF_RNG 0x00000001UL /* has random # \ ++ * generator */ ++#define CKF_WRITE_PROTECTED 0x00000002UL /* token is \ ++ * write- \ ++ * protected */ ++#define CKF_LOGIN_REQUIRED 0x00000004UL /* user must \ ++ * login */ ++#define CKF_USER_PIN_INITIALIZED 0x00000008UL /* normal user's \ ++ * PIN is set */ + +-/* CKF_RESTORE_KEY_NOT_NEEDED. If it is set, ++/* CKF_RESTORE_KEY_NOT_NEEDED is new for v2.0. If it is set, + * that means that *every* time the state of cryptographic + * operations of a session is successfully saved, all keys +- * needed to continue those operations are stored in the state +- */ +-#define CKF_RESTORE_KEY_NOT_NEEDED 0x00000020UL ++ * needed to continue those operations are stored in the state */ ++#define CKF_RESTORE_KEY_NOT_NEEDED 0x00000020UL + +-/* CKF_CLOCK_ON_TOKEN. If it is set, that means ++/* CKF_CLOCK_ON_TOKEN is new for v2.0. If it is set, that means + * that the token has some sort of clock. The time on that +- * clock is returned in the token info structure +- */ +-#define CKF_CLOCK_ON_TOKEN 0x00000040UL ++ * clock is returned in the token info structure */ ++#define CKF_CLOCK_ON_TOKEN 0x00000040UL + +-/* CKF_PROTECTED_AUTHENTICATION_PATH. If it is ++/* CKF_PROTECTED_AUTHENTICATION_PATH is new for v2.0. If it is + * set, that means that there is some way for the user to login +- * without sending a PIN through the Cryptoki library itself +- */ ++ * without sending a PIN through the PKCS #11 library itself */ + #define CKF_PROTECTED_AUTHENTICATION_PATH 0x00000100UL + +-/* CKF_DUAL_CRYPTO_OPERATIONS. If it is true, ++/* CKF_DUAL_CRYPTO_OPERATIONS is new for v2.0. If it is true, + * that means that a single session with the token can perform + * dual simultaneous cryptographic operations (digest and + * encrypt; decrypt and digest; sign and encrypt; and decrypt +- * and sign) +- */ +-#define CKF_DUAL_CRYPTO_OPERATIONS 0x00000200UL ++ * and sign) */ ++#define CKF_DUAL_CRYPTO_OPERATIONS 0x00000200UL + +-/* CKF_TOKEN_INITIALIZED. If it is true, the ++/* CKF_TOKEN_INITIALIZED if new for v2.10. If it is true, the + * token has been initialized using C_InitializeToken or an + * equivalent mechanism outside the scope of PKCS #11. + * Calling C_InitializeToken when this flag is set will cause +- * the token to be reinitialized. +- */ +-#define CKF_TOKEN_INITIALIZED 0x00000400UL ++ * the token to be reinitialized. */ ++#define CKF_TOKEN_INITIALIZED 0x00000400UL + +-/* CKF_SECONDARY_AUTHENTICATION. If it is ++/* CKF_SECONDARY_AUTHENTICATION if new for v2.10. If it is + * true, the token supports secondary authentication for +- * private key objects. +- */ +-#define CKF_SECONDARY_AUTHENTICATION 0x00000800UL ++ * private key objects. This flag is deprecated in v2.11 and ++ onwards. */ ++#define CKF_SECONDARY_AUTHENTICATION 0x00000800UL + +-/* CKF_USER_PIN_COUNT_LOW. If it is true, an ++/* CKF_USER_PIN_COUNT_LOW if new for v2.10. If it is true, an + * incorrect user login PIN has been entered at least once +- * since the last successful authentication. +- */ +-#define CKF_USER_PIN_COUNT_LOW 0x00010000UL ++ * since the last successful authentication. */ ++#define CKF_USER_PIN_COUNT_LOW 0x00010000UL + +-/* CKF_USER_PIN_FINAL_TRY. If it is true, +- * supplying an incorrect user PIN will it to become locked. +- */ +-#define CKF_USER_PIN_FINAL_TRY 0x00020000UL ++/* CKF_USER_PIN_FINAL_TRY if new for v2.10. If it is true, ++ * supplying an incorrect user PIN will it to become locked. */ ++#define CKF_USER_PIN_FINAL_TRY 0x00020000UL + +-/* CKF_USER_PIN_LOCKED. If it is true, the ++/* CKF_USER_PIN_LOCKED if new for v2.10. If it is true, the + * user PIN has been locked. User login to the token is not +- * possible. +- */ +-#define CKF_USER_PIN_LOCKED 0x00040000UL ++ * possible. */ ++#define CKF_USER_PIN_LOCKED 0x00040000UL + +-/* CKF_USER_PIN_TO_BE_CHANGED. If it is true, ++/* CKF_USER_PIN_TO_BE_CHANGED if new for v2.10. If it is true, + * the user PIN value is the default value set by token + * initialization or manufacturing, or the PIN has been +- * expired by the card. +- */ +-#define CKF_USER_PIN_TO_BE_CHANGED 0x00080000UL ++ * expired by the card. */ ++#define CKF_USER_PIN_TO_BE_CHANGED 0x00080000UL + +-/* CKF_SO_PIN_COUNT_LOW. If it is true, an ++/* CKF_SO_PIN_COUNT_LOW if new for v2.10. If it is true, an + * incorrect SO login PIN has been entered at least once since +- * the last successful authentication. +- */ +-#define CKF_SO_PIN_COUNT_LOW 0x00100000UL ++ * the last successful authentication. */ ++#define CKF_SO_PIN_COUNT_LOW 0x00100000UL + +-/* CKF_SO_PIN_FINAL_TRY. If it is true, +- * supplying an incorrect SO PIN will it to become locked. +- */ +-#define CKF_SO_PIN_FINAL_TRY 0x00200000UL ++/* CKF_SO_PIN_FINAL_TRY if new for v2.10. If it is true, ++ * supplying an incorrect SO PIN will it to become locked. */ ++#define CKF_SO_PIN_FINAL_TRY 0x00200000UL + +-/* CKF_SO_PIN_LOCKED. If it is true, the SO ++/* CKF_SO_PIN_LOCKED if new for v2.10. If it is true, the SO + * PIN has been locked. SO login to the token is not possible. + */ +-#define CKF_SO_PIN_LOCKED 0x00400000UL ++#define CKF_SO_PIN_LOCKED 0x00400000UL + +-/* CKF_SO_PIN_TO_BE_CHANGED. If it is true, ++/* CKF_SO_PIN_TO_BE_CHANGED if new for v2.10. If it is true, + * the SO PIN value is the default value set by token + * initialization or manufacturing, or the PIN has been +- * expired by the card. +- */ +-#define CKF_SO_PIN_TO_BE_CHANGED 0x00800000UL ++ * expired by the card. */ ++#define CKF_SO_PIN_TO_BE_CHANGED 0x00800000UL + +-#define CKF_ERROR_STATE 0x01000000UL ++#define CKF_ERROR_STATE 0x01000000UL + + typedef CK_TOKEN_INFO CK_PTR CK_TOKEN_INFO_PTR; + +- +-/* CK_SESSION_HANDLE is a Cryptoki-assigned value that +- * identifies a session +- */ +-typedef CK_ULONG CK_SESSION_HANDLE; ++/* CK_SESSION_HANDLE is a PKCS #11-assigned value that ++ * identifies a session */ ++typedef CK_ULONG CK_SESSION_HANDLE; + + typedef CK_SESSION_HANDLE CK_PTR CK_SESSION_HANDLE_PTR; + +- +-/* CK_USER_TYPE enumerates the types of Cryptoki users */ +-typedef CK_ULONG CK_USER_TYPE; ++/* CK_USER_TYPE enumerates the types of PKCS #11 users */ ++/* CK_USER_TYPE has been changed from an enum to a CK_ULONG for ++ * v2.0 */ ++typedef CK_ULONG CK_USER_TYPE; + /* Security Officer */ +-#define CKU_SO 0UL ++#define CKU_SO 0 + /* Normal user */ +-#define CKU_USER 1UL +-/* Context specific */ +-#define CKU_CONTEXT_SPECIFIC 2UL ++#define CKU_USER 1 ++/* Context specific (added in v2.20) */ ++#define CKU_CONTEXT_SPECIFIC 2 + + /* CK_STATE enumerates the session states */ +-typedef CK_ULONG CK_STATE; +-#define CKS_RO_PUBLIC_SESSION 0UL +-#define CKS_RO_USER_FUNCTIONS 1UL +-#define CKS_RW_PUBLIC_SESSION 2UL +-#define CKS_RW_USER_FUNCTIONS 3UL +-#define CKS_RW_SO_FUNCTIONS 4UL ++/* CK_STATE has been changed from an enum to a CK_ULONG for ++ * v2.0 */ ++typedef CK_ULONG CK_STATE; ++#define CKS_RO_PUBLIC_SESSION 0 ++#define CKS_RO_USER_FUNCTIONS 1 ++#define CKS_RW_PUBLIC_SESSION 2 ++#define CKS_RW_USER_FUNCTIONS 3 ++#define CKS_RW_SO_FUNCTIONS 4 + + /* CK_SESSION_INFO provides information about a session */ + typedef struct CK_SESSION_INFO { + CK_SLOT_ID slotID; +- CK_STATE state; +- CK_FLAGS flags; /* see below */ +- CK_ULONG ulDeviceError; /* device-dependent error code */ ++ CK_STATE state; ++ CK_FLAGS flags; /* see below */ ++ ++ /* ulDeviceError was changed from CK_USHORT to CK_ULONG for ++ * v2.0 */ ++ CK_ULONG ulDeviceError; /* device-dependent error code */ + } CK_SESSION_INFO; + + /* The flags are defined in the following table: + * Bit Flag Mask Meaning + */ +-#define CKF_RW_SESSION 0x00000002UL /* session is r/w */ +-#define CKF_SERIAL_SESSION 0x00000004UL /* no parallel */ ++#define CKF_RW_SESSION 0x00000002UL /* session is r/w */ ++#define CKF_SERIAL_SESSION 0x00000004UL /* no parallel */ + + typedef CK_SESSION_INFO CK_PTR CK_SESSION_INFO_PTR; + +- + /* CK_OBJECT_HANDLE is a token-specific identifier for an +- * object +- */ +-typedef CK_ULONG CK_OBJECT_HANDLE; ++ * object */ ++typedef CK_ULONG CK_OBJECT_HANDLE; + + typedef CK_OBJECT_HANDLE CK_PTR CK_OBJECT_HANDLE_PTR; + +- + /* CK_OBJECT_CLASS is a value that identifies the classes (or +- * types) of objects that Cryptoki recognizes. It is defined +- * as follows: +- */ +-typedef CK_ULONG CK_OBJECT_CLASS; ++ * types) of objects that PKCS #11 recognizes. It is defined ++ * as follows: */ ++/* CK_OBJECT_CLASS was changed from CK_USHORT to CK_ULONG for ++ * v2.0 */ ++typedef CK_ULONG CK_OBJECT_CLASS; + + /* The following classes of objects are defined: */ +-#define CKO_DATA 0x00000000UL +-#define CKO_CERTIFICATE 0x00000001UL +-#define CKO_PUBLIC_KEY 0x00000002UL +-#define CKO_PRIVATE_KEY 0x00000003UL +-#define CKO_SECRET_KEY 0x00000004UL +-#define CKO_HW_FEATURE 0x00000005UL ++/* CKO_HW_FEATURE is new for v2.10 */ ++/* CKO_DOMAIN_PARAMETERS is new for v2.11 */ ++/* CKO_MECHANISM is new for v2.20 */ ++/* CKO_PROFILE is new for v3.00 */ ++#define CKO_DATA 0x00000000UL ++#define CKO_CERTIFICATE 0x00000001UL ++#define CKO_PUBLIC_KEY 0x00000002UL ++#define CKO_PRIVATE_KEY 0x00000003UL ++#define CKO_SECRET_KEY 0x00000004UL ++#define CKO_HW_FEATURE 0x00000005UL + #define CKO_DOMAIN_PARAMETERS 0x00000006UL +-#define CKO_MECHANISM 0x00000007UL +-#define CKO_OTP_KEY 0x00000008UL +-#define CKO_PROFILE 0x00000009UL +- +-#define CKO_VENDOR_DEFINED 0x80000000UL ++#define CKO_MECHANISM 0x00000007UL ++#define CKO_PROFILE 0x00000009UL ++#define CKO_VENDOR_DEFINED 0x80000000UL + + typedef CK_OBJECT_CLASS CK_PTR CK_OBJECT_CLASS_PTR; + ++/* CK_PROFILE_ID is new for v3.00. CK_PROFILE_ID is a value that ++ * identifies the profile that the token supports. */ ++typedef CK_ULONG CK_PROFILE_ID; ++ + /* Profile ID's */ +-#define CKP_INVALID_ID 0x00000000UL +-#define CKP_BASELINE_PROVIDER 0x00000001UL +-#define CKP_EXTENDED_PROVIDER 0x00000002UL +-#define CKP_AUTHENTICATION_TOKEN 0x00000003UL ++#define CKP_INVALID_ID 0x00000000UL ++#define CKP_BASELINE_PROVIDER 0x00000001UL ++#define CKP_EXTENDED_PROVIDER 0x00000002UL ++#define CKP_AUTHENTICATION_TOKEN 0x00000003UL + #define CKP_PUBLIC_CERTIFICATES_TOKEN 0x00000004UL +-#define CKP_VENDOR_DEFINED 0x80000000UL ++#define CKP_VENDOR_DEFINED 0x80000000UL + +-/* CK_HW_FEATURE_TYPE is a value that identifies the hardware feature type +- * of an object with CK_OBJECT_CLASS equal to CKO_HW_FEATURE. +- */ +-typedef CK_ULONG CK_HW_FEATURE_TYPE; ++/* CK_HW_FEATURE_TYPE is new for v2.10. CK_HW_FEATURE_TYPE is a ++ * value that identifies the hardware feature type of an object ++ * with CK_OBJECT_CLASS equal to CKO_HW_FEATURE. */ ++typedef CK_ULONG CK_HW_FEATURE_TYPE; + + /* The following hardware feature types are defined */ +-#define CKH_MONOTONIC_COUNTER 0x00000001UL +-#define CKH_CLOCK 0x00000002UL +-#define CKH_USER_INTERFACE 0x00000003UL +-#define CKH_VENDOR_DEFINED 0x80000000UL ++/* CKH_USER_INTERFACE is new for v2.20 */ ++#define CKH_MONOTONIC_COUNTER 0x00000001UL ++#define CKH_CLOCK 0x00000002UL ++#define CKH_USER_INTERFACE 0x00000003UL ++#define CKH_VENDOR_DEFINED 0x80000000UL + + /* CK_KEY_TYPE is a value that identifies a key type */ +-typedef CK_ULONG CK_KEY_TYPE; ++/* CK_KEY_TYPE was changed from CK_USHORT to CK_ULONG for v2.0 */ ++typedef CK_ULONG CK_KEY_TYPE; + + /* the following key types are defined: */ +-#define CKK_RSA 0x00000000UL +-#define CKK_DSA 0x00000001UL +-#define CKK_DH 0x00000002UL +-#define CKK_ECDSA 0x00000003UL /* Deprecated */ +-#define CKK_EC 0x00000003UL +-#define CKK_X9_42_DH 0x00000004UL +-#define CKK_KEA 0x00000005UL +-#define CKK_GENERIC_SECRET 0x00000010UL +-#define CKK_RC2 0x00000011UL +-#define CKK_RC4 0x00000012UL +-#define CKK_DES 0x00000013UL +-#define CKK_DES2 0x00000014UL +-#define CKK_DES3 0x00000015UL +-#define CKK_CAST 0x00000016UL +-#define CKK_CAST3 0x00000017UL +-#define CKK_CAST5 0x00000018UL /* Deprecated */ +-#define CKK_CAST128 0x00000018UL +-#define CKK_RC5 0x00000019UL +-#define CKK_IDEA 0x0000001AUL +-#define CKK_SKIPJACK 0x0000001BUL +-#define CKK_BATON 0x0000001CUL +-#define CKK_JUNIPER 0x0000001DUL +-#define CKK_CDMF 0x0000001EUL +-#define CKK_AES 0x0000001FUL +-#define CKK_BLOWFISH 0x00000020UL +-#define CKK_TWOFISH 0x00000021UL +-#define CKK_SECURID 0x00000022UL +-#define CKK_HOTP 0x00000023UL +-#define CKK_ACTI 0x00000024UL +-#define CKK_CAMELLIA 0x00000025UL +-#define CKK_ARIA 0x00000026UL +- +-/* the following definitions were added in the 2.30 header file, +- * but never defined in the spec. */ +-#define CKK_MD5_HMAC 0x00000027UL +-#define CKK_SHA_1_HMAC 0x00000028UL +-#define CKK_RIPEMD128_HMAC 0x00000029UL +-#define CKK_RIPEMD160_HMAC 0x0000002AUL +-#define CKK_SHA256_HMAC 0x0000002BUL +-#define CKK_SHA384_HMAC 0x0000002CUL +-#define CKK_SHA512_HMAC 0x0000002DUL +-#define CKK_SHA224_HMAC 0x0000002EUL +- +-#define CKK_SEED 0x0000002FUL +-#define CKK_GOSTR3410 0x00000030UL +-#define CKK_GOSTR3411 0x00000031UL +-#define CKK_GOST28147 0x00000032UL +-#define CKK_CHACHA20 0x00000033UL +-#define CKK_POLY1305 0x00000034UL +-#define CKK_AES_XTS 0x00000035UL +-#define CKK_SHA3_224_HMAC 0x00000036UL +-#define CKK_SHA3_256_HMAC 0x00000037UL +-#define CKK_SHA3_384_HMAC 0x00000038UL +-#define CKK_SHA3_512_HMAC 0x00000039UL +-#define CKK_BLAKE2B_160_HMAC 0x0000003aUL +-#define CKK_BLAKE2B_256_HMAC 0x0000003bUL +-#define CKK_BLAKE2B_384_HMAC 0x0000003cUL +-#define CKK_BLAKE2B_512_HMAC 0x0000003dUL +-#define CKK_SALSA20 0x0000003eUL +-#define CKK_X2RATCHET 0x0000003fUL +-#define CKK_EC_EDWARDS 0x00000040UL +-#define CKK_EC_MONTGOMERY 0x00000041UL +-#define CKK_HKDF 0x00000042UL +-#define CKK_SHA512_224_HMAC 0x00000043UL +-#define CKK_SHA512_256_HMAC 0x00000044UL +-#define CKK_SHA512_T_HMAC 0x00000045UL +- +-#define CKK_VENDOR_DEFINED 0x80000000UL ++#define CKK_RSA 0x00000000UL ++#define CKK_DSA 0x00000001UL ++#define CKK_DH 0x00000002UL ++ ++/* CKK_ECDSA and CKK_KEA are new for v2.0 */ ++/* CKK_ECDSA is deprecated in v2.11, CKK_EC is preferred. */ ++#define CKK_ECDSA 0x00000003UL ++#define CKK_EC 0x00000003UL ++#define CKK_X9_42_DH 0x00000004UL ++#define CKK_KEA 0x00000005UL ++ ++#define CKK_GENERIC_SECRET 0x00000010UL ++#define CKK_RC2 0x00000011UL ++#define CKK_RC4 0x00000012UL ++#define CKK_DES 0x00000013UL ++#define CKK_DES2 0x00000014UL ++#define CKK_DES3 0x00000015UL ++ ++/* all these key types are new for v2.0 */ ++#define CKK_CAST 0x00000016UL ++#define CKK_CAST3 0x00000017UL ++/* CKK_CAST5 is deprecated in v2.11, CKK_CAST128 is preferred. */ ++#define CKK_CAST5 0x00000018UL ++#define CKK_CAST128 0x00000018UL ++#define CKK_RC5 0x00000019UL ++#define CKK_IDEA 0x0000001AUL ++#define CKK_SKIPJACK 0x0000001BUL ++#define CKK_BATON 0x0000001CUL ++#define CKK_JUNIPER 0x0000001DUL ++#define CKK_CDMF 0x0000001EUL ++#define CKK_AES 0x0000001FUL ++ ++/* BlowFish and TwoFish are new for v2.20 */ ++#define CKK_BLOWFISH 0x00000020UL ++#define CKK_TWOFISH 0x00000021UL ++ ++/* Camellia is proposed for v2.20 Amendment 3 */ ++#define CKK_CAMELLIA 0x00000025UL ++ ++#define CKK_SEED 0x0000002FUL /* was 2A */ ++ ++/* added in v2.30 */ ++#define CKK_ARIA 0x00000026UL ++ ++/* added in 2.40 */ ++#define CKK_MD5_HMAC 0x00000027UL ++#define CKK_SHA_1_HMAC 0x00000028UL ++#define CKK_RIPEMD128_HMAC 0x00000029UL ++#define CKK_RIPEMD160_HMAC 0x0000002AUL ++#define CKK_SHA256_HMAC 0x0000002BUL ++#define CKK_SHA384_HMAC 0x0000002CUL ++#define CKK_SHA512_HMAC 0x0000002DUL ++#define CKK_SHA224_HMAC 0x0000002EUL ++#define CKK_GOSTR3410 0x00000030UL ++#define CKK_GOSTR3411 0x00000031UL ++#define CKK_GOST28147 0x00000032UL ++#define CKK_CHACHA20 0x00000033UL ++#define CKK_POLY1305 0x00000034UL ++#define CKK_AES_XTS 0x00000035UL ++#define CKK_SHA3_224_HMAC 0x00000036UL ++#define CKK_SHA3_256_HMAC 0x00000037UL ++#define CKK_SHA3_384_HMAC 0x00000038UL ++#define CKK_SHA3_512_HMAC 0x00000039UL ++ ++/* added in 3.0 */ ++#define CKK_BLAKE2B_160_HMAC 0x0000003aUL ++#define CKK_BLAKE2B_256_HMAC 0x0000003bUL ++#define CKK_BLAKE2B_384_HMAC 0x0000003cUL ++#define CKK_BLAKE2B_512_HMAC 0x0000003dUL ++#define CKK_SALSA20 0x0000003eUL ++#define CKK_X2RATCHET 0x0000003fUL ++#define CKK_EC_EDWARDS 0x00000040UL ++#define CKK_EC_MONTGOMERY 0x00000041UL ++#define CKK_HKDF 0x00000042UL ++#define CKK_SHA512_224_HMAC 0x00000043UL ++#define CKK_SHA512_256_HMAC 0x00000044UL ++#define CKK_SHA512_T_HMAC 0x00000045UL + ++#define CKK_VENDOR_DEFINED 0x80000000UL + + /* CK_CERTIFICATE_TYPE is a value that identifies a certificate +- * type +- */ +-typedef CK_ULONG CK_CERTIFICATE_TYPE; +- +-#define CK_CERTIFICATE_CATEGORY_UNSPECIFIED 0UL +-#define CK_CERTIFICATE_CATEGORY_TOKEN_USER 1UL +-#define CK_CERTIFICATE_CATEGORY_AUTHORITY 2UL +-#define CK_CERTIFICATE_CATEGORY_OTHER_ENTITY 3UL +- +-#define CK_SECURITY_DOMAIN_UNSPECIFIED 0UL +-#define CK_SECURITY_DOMAIN_MANUFACTURER 1UL +-#define CK_SECURITY_DOMAIN_OPERATOR 2UL +-#define CK_SECURITY_DOMAIN_THIRD_PARTY 3UL +- ++ * type */ ++/* CK_CERTIFICATE_TYPE was changed from CK_USHORT to CK_ULONG ++ * for v2.0 */ ++typedef CK_ULONG CK_CERTIFICATE_TYPE; + + /* The following certificate types are defined: */ +-#define CKC_X_509 0x00000000UL +-#define CKC_X_509_ATTR_CERT 0x00000001UL +-#define CKC_WTLS 0x00000002UL +-#define CKC_VENDOR_DEFINED 0x80000000UL +- ++/* CKC_X_509_ATTR_CERT is new for v2.10 */ ++/* CKC_WTLS is new for v2.20 */ ++#define CKC_X_509 0x00000000UL ++#define CKC_X_509_ATTR_CERT 0x00000001UL ++#define CKC_WTLS 0x00000002UL ++#define CKC_VENDOR_DEFINED 0x80000000UL + + /* CK_ATTRIBUTE_TYPE is a value that identifies an attribute +- * type +- */ +-typedef CK_ULONG CK_ATTRIBUTE_TYPE; ++ * type */ ++/* CK_ATTRIBUTE_TYPE was changed from CK_USHORT to CK_ULONG for ++ * v2.0 */ ++typedef CK_ULONG CK_ATTRIBUTE_TYPE; + +-/* The CKF_ARRAY_ATTRIBUTE flag identifies an attribute which +- * consists of an array of values. +- */ +-#define CKF_ARRAY_ATTRIBUTE 0x40000000UL ++/* values for CKA_CERTIFICATE_CATEGORY v2.20 */ ++typedef CK_ULONG CK_CERTIFICATE_CATEGORY; ++#define CK_CERTIFICATE_CATEGORY_UNSPECIFIED 0UL ++#define CK_CERTIFICATE_CATEGORY_TOKEN_USER 1UL ++#define CK_CERTIFICATE_CATEGORY_AUTHORITY 2UL ++#define CK_CERTIFICATE_CATEGORY_OTHER_ENTITY 3UL + +-/* The following OTP-related defines relate to the CKA_OTP_FORMAT attribute */ +-#define CK_OTP_FORMAT_DECIMAL 0UL +-#define CK_OTP_FORMAT_HEXADECIMAL 1UL +-#define CK_OTP_FORMAT_ALPHANUMERIC 2UL +-#define CK_OTP_FORMAT_BINARY 3UL ++/* values for CKA_JAVA_MIDP_SECURITY_DOMAIN v2.20 */ ++typedef CK_ULONG CK_JAVA_MIDP_SECURITY_DOMAIN; ++#define CK_SECURITY_DOMAIN_UNSPECIFIED 0UL ++#define CK_SECURITY_DOMAIN_MANUFACTURER 1UL ++#define CK_SECURITY_DOMAIN_OPERATOR 2UL ++#define CK_SECURITY_DOMAIN_THIRD_PARTY 3UL ++ ++/* values for CKA_OTP_FORMAT */ ++#define CK_OTP_FORMAT_DECIMAL 0UL ++#define CK_OTP_FORMAT_HEXADECIMAL 1UL ++#define CK_OTP_FORMAT_ALPHANUMERIC 2UL ++#define CK_OTP_FORMAT_BINARY 3UL ++ ++/* values for CKA_OTP_CHALLENGE_REQUIREMENT, CKA_OTP_TIME_REQUIREMENT, ++ * CKA_OTP_COUNTER_REQUIREMENT, CKA_OTP_PIN_REQUIREMENT */ ++#define CK_OTP_PARAM_IGNORED 0UL ++#define CK_OTP_PARAM_OPTIONAL 1UL ++#define CK_OTP_PARAM_MANDATORY 2UL + +-/* The following OTP-related defines relate to the CKA_OTP_..._REQUIREMENT +- * attributes +- */ +-#define CK_OTP_PARAM_IGNORED 0UL +-#define CK_OTP_PARAM_OPTIONAL 1UL +-#define CK_OTP_PARAM_MANDATORY 2UL ++/* The CKF_ARRAY_ATTRIBUTE flag identifies an attribute which ++ consists of an array of values. */ ++#define CKF_ARRAY_ATTRIBUTE 0x40000000UL + + /* The following attribute types are defined: */ +-#define CKA_CLASS 0x00000000UL +-#define CKA_TOKEN 0x00000001UL +-#define CKA_PRIVATE 0x00000002UL +-#define CKA_LABEL 0x00000003UL +-#define CKA_UNIQUE_ID 0x00000004UL +-#define CKA_APPLICATION 0x00000010UL +-#define CKA_VALUE 0x00000011UL +-#define CKA_OBJECT_ID 0x00000012UL +-#define CKA_CERTIFICATE_TYPE 0x00000080UL +-#define CKA_ISSUER 0x00000081UL +-#define CKA_SERIAL_NUMBER 0x00000082UL +-#define CKA_AC_ISSUER 0x00000083UL +-#define CKA_OWNER 0x00000084UL +-#define CKA_ATTR_TYPES 0x00000085UL +-#define CKA_TRUSTED 0x00000086UL +-#define CKA_CERTIFICATE_CATEGORY 0x00000087UL +-#define CKA_JAVA_MIDP_SECURITY_DOMAIN 0x00000088UL +-#define CKA_URL 0x00000089UL +-#define CKA_HASH_OF_SUBJECT_PUBLIC_KEY 0x0000008AUL +-#define CKA_HASH_OF_ISSUER_PUBLIC_KEY 0x0000008BUL +-#define CKA_NAME_HASH_ALGORITHM 0x0000008CUL +-#define CKA_CHECK_VALUE 0x00000090UL +- +-#define CKA_KEY_TYPE 0x00000100UL +-#define CKA_SUBJECT 0x00000101UL +-#define CKA_ID 0x00000102UL +-#define CKA_SENSITIVE 0x00000103UL +-#define CKA_ENCRYPT 0x00000104UL +-#define CKA_DECRYPT 0x00000105UL +-#define CKA_WRAP 0x00000106UL +-#define CKA_UNWRAP 0x00000107UL +-#define CKA_SIGN 0x00000108UL +-#define CKA_SIGN_RECOVER 0x00000109UL +-#define CKA_VERIFY 0x0000010AUL +-#define CKA_VERIFY_RECOVER 0x0000010BUL +-#define CKA_DERIVE 0x0000010CUL +-#define CKA_START_DATE 0x00000110UL +-#define CKA_END_DATE 0x00000111UL +-#define CKA_MODULUS 0x00000120UL +-#define CKA_MODULUS_BITS 0x00000121UL +-#define CKA_PUBLIC_EXPONENT 0x00000122UL +-#define CKA_PRIVATE_EXPONENT 0x00000123UL +-#define CKA_PRIME_1 0x00000124UL +-#define CKA_PRIME_2 0x00000125UL +-#define CKA_EXPONENT_1 0x00000126UL +-#define CKA_EXPONENT_2 0x00000127UL +-#define CKA_COEFFICIENT 0x00000128UL +-#define CKA_PUBLIC_KEY_INFO 0x00000129UL +-#define CKA_PRIME 0x00000130UL +-#define CKA_SUBPRIME 0x00000131UL +-#define CKA_BASE 0x00000132UL +- +-#define CKA_PRIME_BITS 0x00000133UL +-#define CKA_SUBPRIME_BITS 0x00000134UL +-#define CKA_SUB_PRIME_BITS CKA_SUBPRIME_BITS +- +-#define CKA_VALUE_BITS 0x00000160UL +-#define CKA_VALUE_LEN 0x00000161UL +-#define CKA_EXTRACTABLE 0x00000162UL +-#define CKA_LOCAL 0x00000163UL +-#define CKA_NEVER_EXTRACTABLE 0x00000164UL +-#define CKA_ALWAYS_SENSITIVE 0x00000165UL +-#define CKA_KEY_GEN_MECHANISM 0x00000166UL +- +-#define CKA_MODIFIABLE 0x00000170UL +-#define CKA_COPYABLE 0x00000171UL +- +-#define CKA_DESTROYABLE 0x00000172UL +- +-#define CKA_ECDSA_PARAMS 0x00000180UL /* Deprecated */ +-#define CKA_EC_PARAMS 0x00000180UL +- +-#define CKA_EC_POINT 0x00000181UL +- +-#define CKA_SECONDARY_AUTH 0x00000200UL /* Deprecated */ +-#define CKA_AUTH_PIN_FLAGS 0x00000201UL /* Deprecated */ +- +-#define CKA_ALWAYS_AUTHENTICATE 0x00000202UL +- +-#define CKA_WRAP_WITH_TRUSTED 0x00000210UL +-#define CKA_WRAP_TEMPLATE (CKF_ARRAY_ATTRIBUTE|0x00000211UL) +-#define CKA_UNWRAP_TEMPLATE (CKF_ARRAY_ATTRIBUTE|0x00000212UL) +-#define CKA_DERIVE_TEMPLATE (CKF_ARRAY_ATTRIBUTE|0x00000213UL) +- +-#define CKA_OTP_FORMAT 0x00000220UL +-#define CKA_OTP_LENGTH 0x00000221UL +-#define CKA_OTP_TIME_INTERVAL 0x00000222UL +-#define CKA_OTP_USER_FRIENDLY_MODE 0x00000223UL ++#define CKA_CLASS 0x00000000UL ++#define CKA_TOKEN 0x00000001UL ++#define CKA_PRIVATE 0x00000002UL ++#define CKA_LABEL 0x00000003UL ++#define CKA_APPLICATION 0x00000010UL ++#define CKA_VALUE 0x00000011UL ++ ++/* CKA_OBJECT_ID is new for v2.10 */ ++#define CKA_OBJECT_ID 0x00000012UL ++ ++#define CKA_CERTIFICATE_TYPE 0x00000080UL ++#define CKA_ISSUER 0x00000081UL ++#define CKA_SERIAL_NUMBER 0x00000082UL ++ ++/* CKA_AC_ISSUER, CKA_OWNER, and CKA_ATTR_TYPES are new ++ * for v2.10 */ ++#define CKA_AC_ISSUER 0x00000083UL ++#define CKA_OWNER 0x00000084UL ++#define CKA_ATTR_TYPES 0x00000085UL ++ ++/* CKA_TRUSTED is new for v2.11 */ ++#define CKA_TRUSTED 0x00000086UL ++ ++/* CKA_CERTIFICATE_CATEGORY ... ++ * CKA_CHECK_VALUE are new for v2.20 */ ++#define CKA_CERTIFICATE_CATEGORY 0x00000087UL ++#define CKA_JAVA_MIDP_SECURITY_DOMAIN 0x00000088UL ++#define CKA_URL 0x00000089UL ++#define CKA_HASH_OF_SUBJECT_PUBLIC_KEY 0x0000008AUL ++#define CKA_HASH_OF_ISSUER_PUBLIC_KEY 0x0000008BUL ++#define CKA_CHECK_VALUE 0x00000090UL ++ ++#define CKA_KEY_TYPE 0x00000100UL ++#define CKA_SUBJECT 0x00000101UL ++#define CKA_ID 0x00000102UL ++#define CKA_SENSITIVE 0x00000103UL ++#define CKA_ENCRYPT 0x00000104UL ++#define CKA_DECRYPT 0x00000105UL ++#define CKA_WRAP 0x00000106UL ++#define CKA_UNWRAP 0x00000107UL ++#define CKA_SIGN 0x00000108UL ++#define CKA_SIGN_RECOVER 0x00000109UL ++#define CKA_VERIFY 0x0000010AUL ++#define CKA_VERIFY_RECOVER 0x0000010BUL ++#define CKA_DERIVE 0x0000010CUL ++#define CKA_START_DATE 0x00000110UL ++#define CKA_END_DATE 0x00000111UL ++#define CKA_MODULUS 0x00000120UL ++#define CKA_MODULUS_BITS 0x00000121UL ++#define CKA_PUBLIC_EXPONENT 0x00000122UL ++#define CKA_PRIVATE_EXPONENT 0x00000123UL ++#define CKA_PRIME_1 0x00000124UL ++#define CKA_PRIME_2 0x00000125UL ++#define CKA_EXPONENT_1 0x00000126UL ++#define CKA_EXPONENT_2 0x00000127UL ++#define CKA_COEFFICIENT 0x00000128UL ++/* CKA_PUBLIC_KEY_INFO is new for v2.40 */ ++#define CKA_PUBLIC_KEY_INFO 0x00000129UL ++#define CKA_PRIME 0x00000130UL ++#define CKA_SUBPRIME 0x00000131UL ++#define CKA_BASE 0x00000132UL ++ ++/* CKA_PRIME_BITS and CKA_SUB_PRIME_BITS are new for v2.11 */ ++#define CKA_PRIME_BITS 0x00000133UL ++#define CKA_SUBPRIME_BITS 0x00000134UL ++#define CKA_SUB_PRIME_BITS CKA_SUBPRIME_BITS ++/* (To retain backwards-compatibility) */ ++ ++#define CKA_VALUE_BITS 0x00000160UL ++#define CKA_VALUE_LEN 0x00000161UL ++ ++/* CKA_EXTRACTABLE, CKA_LOCAL, CKA_NEVER_EXTRACTABLE, ++ * CKA_ALWAYS_SENSITIVE, CKA_MODIFIABLE, CKA_ECDSA_PARAMS, ++ * and CKA_EC_POINT are new for v2.0 */ ++#define CKA_EXTRACTABLE 0x00000162UL ++#define CKA_LOCAL 0x00000163UL ++#define CKA_NEVER_EXTRACTABLE 0x00000164UL ++#define CKA_ALWAYS_SENSITIVE 0x00000165UL ++ ++/* CKA_KEY_GEN_MECHANISM is new for v2.11 */ ++#define CKA_KEY_GEN_MECHANISM 0x00000166UL ++ ++#define CKA_MODIFIABLE 0x00000170UL ++ ++/* New for 2.40 */ ++#define CKA_COPYABLE 0x00000171UL ++#define CKA_DESTROYABLE 0x00000172UL ++ ++/* CKA_ECDSA_PARAMS is deprecated in v2.11, ++ * CKA_EC_PARAMS is preferred. */ ++#define CKA_ECDSA_PARAMS 0x00000180UL ++#define CKA_EC_PARAMS 0x00000180UL ++ ++#define CKA_EC_POINT 0x00000181UL ++ ++/* CKA_SECONDARY_AUTH, CKA_AUTH_PIN_FLAGS, ++ * are new for v2.10. Deprecated in v2.11 and onwards. */ ++#define CKA_SECONDARY_AUTH 0x00000200UL ++#define CKA_AUTH_PIN_FLAGS 0x00000201UL ++ ++/* CKA_ALWAYS_AUTHENTICATE ... ++ * CKA_UNWRAP_TEMPLATE are new for v2.20 */ ++#define CKA_ALWAYS_AUTHENTICATE 0x00000202UL ++ ++#define CKA_WRAP_WITH_TRUSTED 0x00000210UL ++#define CKA_WRAP_TEMPLATE (CKF_ARRAY_ATTRIBUTE | 0x00000211UL) ++#define CKA_UNWRAP_TEMPLATE (CKF_ARRAY_ATTRIBUTE | 0x00000212UL) ++ ++/* new for 2.40 */ ++#define CKA_DERIVE_TEMPLATE (CKF_ARRAY_ATTRIBUTE | 0x00000213UL) ++#define CKA_OTP_FORMAT 0x00000220UL ++#define CKA_OTP_LENGTH 0x00000221UL ++#define CKA_OTP_TIME_INTERVAL 0x00000222UL ++#define CKA_OTP_USER_FRIENDLY_MODE 0x00000223UL + #define CKA_OTP_CHALLENGE_REQUIREMENT 0x00000224UL +-#define CKA_OTP_TIME_REQUIREMENT 0x00000225UL +-#define CKA_OTP_COUNTER_REQUIREMENT 0x00000226UL +-#define CKA_OTP_PIN_REQUIREMENT 0x00000227UL +-#define CKA_OTP_COUNTER 0x0000022EUL +-#define CKA_OTP_TIME 0x0000022FUL +-#define CKA_OTP_USER_IDENTIFIER 0x0000022AUL +-#define CKA_OTP_SERVICE_IDENTIFIER 0x0000022BUL +-#define CKA_OTP_SERVICE_LOGO 0x0000022CUL +-#define CKA_OTP_SERVICE_LOGO_TYPE 0x0000022DUL +- +-#define CKA_GOSTR3410_PARAMS 0x00000250UL +-#define CKA_GOSTR3411_PARAMS 0x00000251UL +-#define CKA_GOST28147_PARAMS 0x00000252UL +- +-#define CKA_HW_FEATURE_TYPE 0x00000300UL +-#define CKA_RESET_ON_INIT 0x00000301UL +-#define CKA_HAS_RESET 0x00000302UL +- +-#define CKA_PIXEL_X 0x00000400UL +-#define CKA_PIXEL_Y 0x00000401UL +-#define CKA_RESOLUTION 0x00000402UL +-#define CKA_CHAR_ROWS 0x00000403UL +-#define CKA_CHAR_COLUMNS 0x00000404UL +-#define CKA_COLOR 0x00000405UL +-#define CKA_BITS_PER_PIXEL 0x00000406UL +-#define CKA_CHAR_SETS 0x00000480UL +-#define CKA_ENCODING_METHODS 0x00000481UL +-#define CKA_MIME_TYPES 0x00000482UL +-#define CKA_MECHANISM_TYPE 0x00000500UL +-#define CKA_REQUIRED_CMS_ATTRIBUTES 0x00000501UL +-#define CKA_DEFAULT_CMS_ATTRIBUTES 0x00000502UL +-#define CKA_SUPPORTED_CMS_ATTRIBUTES 0x00000503UL +-#define CKA_ALLOWED_MECHANISMS (CKF_ARRAY_ATTRIBUTE|0x00000600UL) +-#define CKA_PROFILE_ID 0x00000601UL +-#define CKA_X2RATCHET_BAG 0x00000602UL +-#define CKA_X2RATCHET_BAGSIZE 0x00000603UL +-#define CKA_X2RATCHET_BOBS1STMSG 0x00000604UL +-#define CKA_X2RATCHET_CKR 0x00000605UL +-#define CKA_X2RATCHET_CKS 0x00000606UL +-#define CKA_X2RATCHET_DHP 0x00000607UL +-#define CKA_X2RATCHET_DHR 0x00000608UL +-#define CKA_X2RATCHET_DHS 0x00000609UL +-#define CKA_X2RATCHET_HKR 0x0000060aUL +-#define CKA_X2RATCHET_HKS 0x0000060bUL +-#define CKA_X2RATCHET_ISALICE 0x0000060cUL +-#define CKA_X2RATCHET_NHKR 0x0000060dUL +-#define CKA_X2RATCHET_NHKS 0x0000060eUL +-#define CKA_X2RATCHET_NR 0x0000060fUL +-#define CKA_X2RATCHET_NS 0x00000610UL +-#define CKA_X2RATCHET_PNS 0x00000611UL +-#define CKA_X2RATCHET_RK 0x00000612UL ++#define CKA_OTP_TIME_REQUIREMENT 0x00000225UL ++#define CKA_OTP_COUNTER_REQUIREMENT 0x00000226UL ++#define CKA_OTP_PIN_REQUIREMENT 0x00000227UL ++#define CKA_OTP_COUNTER 0x0000022EUL ++#define CKA_OTP_TIME 0x0000022FUL ++#define CKA_OTP_USER_IDENTIFIER 0x0000022AUL ++#define CKA_OTP_SERVICE_IDENTIFIER 0x0000022BUL ++#define CKA_OTP_SERVICE_LOGO 0x0000022CUL ++#define CKA_OTP_SERVICE_LOGO_TYPE 0x0000022DUL ++#define CKA_GOSTR3410_PARAMS 0x00000250UL ++#define CKA_GOSTR3411_PARAMS 0x00000251UL ++#define CKA_GOST28147_PARAMS 0x00000252UL ++ ++/* CKA_HW_FEATURE_TYPE, CKA_RESET_ON_INIT, and CKA_HAS_RESET ++ * are new for v2.10 */ ++#define CKA_HW_FEATURE_TYPE 0x00000300UL ++#define CKA_RESET_ON_INIT 0x00000301UL ++#define CKA_HAS_RESET 0x00000302UL ++ ++/* The following attributes are new for v2.20 */ ++#define CKA_PIXEL_X 0x00000400UL ++#define CKA_PIXEL_Y 0x00000401UL ++#define CKA_RESOLUTION 0x00000402UL ++#define CKA_CHAR_ROWS 0x00000403UL ++#define CKA_CHAR_COLUMNS 0x00000404UL ++#define CKA_COLOR 0x00000405UL ++#define CKA_BITS_PER_PIXEL 0x00000406UL ++#define CKA_CHAR_SETS 0x00000480UL ++#define CKA_ENCODING_METHODS 0x00000481UL ++#define CKA_MIME_TYPES 0x00000482UL ++#define CKA_MECHANISM_TYPE 0x00000500UL ++#define CKA_REQUIRED_CMS_ATTRIBUTES 0x00000501UL ++#define CKA_DEFAULT_CMS_ATTRIBUTES 0x00000502UL ++#define CKA_SUPPORTED_CMS_ATTRIBUTES 0x00000503UL ++#define CKA_ALLOWED_MECHANISMS (CKF_ARRAY_ATTRIBUTE | 0x00000600UL) ++ ++/* new for v3.0 */ ++#define CKA_PROFILE_ID 0x00000601UL ++#define CKA_X2RATCHET_BAG 0x00000602UL ++#define CKA_X2RATCHET_BAGSIZE 0x00000603UL ++#define CKA_X2RATCHET_BOBS1STMSG 0x00000604UL ++#define CKA_X2RATCHET_CKR 0x00000605UL ++#define CKA_X2RATCHET_CKS 0x00000606UL ++#define CKA_X2RATCHET_DHP 0x00000607UL ++#define CKA_X2RATCHET_DHR 0x00000608UL ++#define CKA_X2RATCHET_DHS 0x00000609UL ++#define CKA_X2RATCHET_HKR 0x0000060aUL ++#define CKA_X2RATCHET_HKS 0x0000060bUL ++#define CKA_X2RATCHET_ISALICE 0x0000060cUL ++#define CKA_X2RATCHET_NHKR 0x0000060dUL ++#define CKA_X2RATCHET_NHKS 0x0000060eUL ++#define CKA_X2RATCHET_NR 0x0000060fUL ++#define CKA_X2RATCHET_NS 0x00000610UL ++#define CKA_X2RATCHET_PNS 0x00000611UL ++#define CKA_X2RATCHET_RK 0x00000612UL + +-#define CKA_VENDOR_DEFINED 0x80000000UL ++#define CKA_VENDOR_DEFINED 0x80000000UL + + /* CK_ATTRIBUTE is a structure that includes the type, length +- * and value of an attribute +- */ ++ * and value of an attribute */ + typedef struct CK_ATTRIBUTE { + CK_ATTRIBUTE_TYPE type; +- CK_VOID_PTR pValue; +- CK_ULONG ulValueLen; /* in bytes */ ++ CK_VOID_PTR pValue; ++ ++ /* ulValueLen went from CK_USHORT to CK_ULONG for v2.0 */ ++ CK_ULONG ulValueLen; /* in bytes */ + } CK_ATTRIBUTE; + + typedef CK_ATTRIBUTE CK_PTR CK_ATTRIBUTE_PTR; + + /* CK_DATE is a structure that defines a date */ +-typedef struct CK_DATE{ +- CK_CHAR year[4]; /* the year ("1900" - "9999") */ +- CK_CHAR month[2]; /* the month ("01" - "12") */ +- CK_CHAR day[2]; /* the day ("01" - "31") */ ++typedef struct CK_DATE { ++ CK_CHAR year[4]; /* the year ("1900" - "9999") */ ++ CK_CHAR month[2]; /* the month ("01" - "12") */ ++ CK_CHAR day[2]; /* the day ("01" - "31") */ + } CK_DATE; + +- + /* CK_MECHANISM_TYPE is a value that identifies a mechanism +- * type +- */ +-typedef CK_ULONG CK_MECHANISM_TYPE; ++ * type */ ++/* CK_MECHANISM_TYPE was changed from CK_USHORT to CK_ULONG for ++ * v2.0 */ ++typedef CK_ULONG CK_MECHANISM_TYPE; + + /* the following mechanism types are defined: */ +-#define CKM_RSA_PKCS_KEY_PAIR_GEN 0x00000000UL +-#define CKM_RSA_PKCS 0x00000001UL +-#define CKM_RSA_9796 0x00000002UL +-#define CKM_RSA_X_509 0x00000003UL +- +-#define CKM_MD2_RSA_PKCS 0x00000004UL +-#define CKM_MD5_RSA_PKCS 0x00000005UL +-#define CKM_SHA1_RSA_PKCS 0x00000006UL +- +-#define CKM_RIPEMD128_RSA_PKCS 0x00000007UL +-#define CKM_RIPEMD160_RSA_PKCS 0x00000008UL +-#define CKM_RSA_PKCS_OAEP 0x00000009UL +- +-#define CKM_RSA_X9_31_KEY_PAIR_GEN 0x0000000AUL +-#define CKM_RSA_X9_31 0x0000000BUL +-#define CKM_SHA1_RSA_X9_31 0x0000000CUL +-#define CKM_RSA_PKCS_PSS 0x0000000DUL +-#define CKM_SHA1_RSA_PKCS_PSS 0x0000000EUL +- +-#define CKM_DSA_KEY_PAIR_GEN 0x00000010UL +-#define CKM_DSA 0x00000011UL +-#define CKM_DSA_SHA1 0x00000012UL +-#define CKM_DSA_SHA224 0x00000013UL +-#define CKM_DSA_SHA256 0x00000014UL +-#define CKM_DSA_SHA384 0x00000015UL +-#define CKM_DSA_SHA512 0x00000016UL +-#define CKM_DSA_SHA3_224 0x00000018UL +-#define CKM_DSA_SHA3_256 0x00000019UL +-#define CKM_DSA_SHA3_384 0x0000001AUL +-#define CKM_DSA_SHA3_512 0x0000001BUL +- +-#define CKM_DH_PKCS_KEY_PAIR_GEN 0x00000020UL +-#define CKM_DH_PKCS_DERIVE 0x00000021UL +- +-#define CKM_X9_42_DH_KEY_PAIR_GEN 0x00000030UL +-#define CKM_X9_42_DH_DERIVE 0x00000031UL +-#define CKM_X9_42_DH_HYBRID_DERIVE 0x00000032UL +-#define CKM_X9_42_MQV_DERIVE 0x00000033UL +- +-#define CKM_SHA256_RSA_PKCS 0x00000040UL +-#define CKM_SHA384_RSA_PKCS 0x00000041UL +-#define CKM_SHA512_RSA_PKCS 0x00000042UL +-#define CKM_SHA256_RSA_PKCS_PSS 0x00000043UL +-#define CKM_SHA384_RSA_PKCS_PSS 0x00000044UL +-#define CKM_SHA512_RSA_PKCS_PSS 0x00000045UL +- +-#define CKM_SHA224_RSA_PKCS 0x00000046UL +-#define CKM_SHA224_RSA_PKCS_PSS 0x00000047UL +- +-#define CKM_SHA512_224 0x00000048UL +-#define CKM_SHA512_224_HMAC 0x00000049UL +-#define CKM_SHA512_224_HMAC_GENERAL 0x0000004AUL +-#define CKM_SHA512_224_KEY_DERIVATION 0x0000004BUL +-#define CKM_SHA512_256 0x0000004CUL +-#define CKM_SHA512_256_HMAC 0x0000004DUL +-#define CKM_SHA512_256_HMAC_GENERAL 0x0000004EUL +-#define CKM_SHA512_256_KEY_DERIVATION 0x0000004FUL +- +-#define CKM_SHA512_T 0x00000050UL +-#define CKM_SHA512_T_HMAC 0x00000051UL +-#define CKM_SHA512_T_HMAC_GENERAL 0x00000052UL +-#define CKM_SHA512_T_KEY_DERIVATION 0x00000053UL +- +-#define CKM_SHA3_256_RSA_PKCS 0x00000060UL +-#define CKM_SHA3_384_RSA_PKCS 0x00000061UL +-#define CKM_SHA3_512_RSA_PKCS 0x00000062UL +-#define CKM_SHA3_256_RSA_PKCS_PSS 0x00000063UL +-#define CKM_SHA3_384_RSA_PKCS_PSS 0x00000064UL +-#define CKM_SHA3_512_RSA_PKCS_PSS 0x00000065UL +-#define CKM_SHA3_224_RSA_PKCS 0x00000066UL +-#define CKM_SHA3_224_RSA_PKCS_PSS 0x00000067UL +- +-#define CKM_RC2_KEY_GEN 0x00000100UL +-#define CKM_RC2_ECB 0x00000101UL +-#define CKM_RC2_CBC 0x00000102UL +-#define CKM_RC2_MAC 0x00000103UL +- +-#define CKM_RC2_MAC_GENERAL 0x00000104UL +-#define CKM_RC2_CBC_PAD 0x00000105UL +- +-#define CKM_RC4_KEY_GEN 0x00000110UL +-#define CKM_RC4 0x00000111UL +-#define CKM_DES_KEY_GEN 0x00000120UL +-#define CKM_DES_ECB 0x00000121UL +-#define CKM_DES_CBC 0x00000122UL +-#define CKM_DES_MAC 0x00000123UL +- +-#define CKM_DES_MAC_GENERAL 0x00000124UL +-#define CKM_DES_CBC_PAD 0x00000125UL +- +-#define CKM_DES2_KEY_GEN 0x00000130UL +-#define CKM_DES3_KEY_GEN 0x00000131UL +-#define CKM_DES3_ECB 0x00000132UL +-#define CKM_DES3_CBC 0x00000133UL +-#define CKM_DES3_MAC 0x00000134UL +- +-#define CKM_DES3_MAC_GENERAL 0x00000135UL +-#define CKM_DES3_CBC_PAD 0x00000136UL +-#define CKM_DES3_CMAC_GENERAL 0x00000137UL +-#define CKM_DES3_CMAC 0x00000138UL +-#define CKM_CDMF_KEY_GEN 0x00000140UL +-#define CKM_CDMF_ECB 0x00000141UL +-#define CKM_CDMF_CBC 0x00000142UL +-#define CKM_CDMF_MAC 0x00000143UL +-#define CKM_CDMF_MAC_GENERAL 0x00000144UL +-#define CKM_CDMF_CBC_PAD 0x00000145UL +- +-#define CKM_DES_OFB64 0x00000150UL +-#define CKM_DES_OFB8 0x00000151UL +-#define CKM_DES_CFB64 0x00000152UL +-#define CKM_DES_CFB8 0x00000153UL +- +-#define CKM_MD2 0x00000200UL +- +-#define CKM_MD2_HMAC 0x00000201UL +-#define CKM_MD2_HMAC_GENERAL 0x00000202UL +- +-#define CKM_MD5 0x00000210UL +- +-#define CKM_MD5_HMAC 0x00000211UL +-#define CKM_MD5_HMAC_GENERAL 0x00000212UL +- +-#define CKM_SHA_1 0x00000220UL +- +-#define CKM_SHA_1_HMAC 0x00000221UL +-#define CKM_SHA_1_HMAC_GENERAL 0x00000222UL +- +-#define CKM_RIPEMD128 0x00000230UL +-#define CKM_RIPEMD128_HMAC 0x00000231UL +-#define CKM_RIPEMD128_HMAC_GENERAL 0x00000232UL +-#define CKM_RIPEMD160 0x00000240UL +-#define CKM_RIPEMD160_HMAC 0x00000241UL +-#define CKM_RIPEMD160_HMAC_GENERAL 0x00000242UL +- +-#define CKM_SHA256 0x00000250UL +-#define CKM_SHA256_HMAC 0x00000251UL +-#define CKM_SHA256_HMAC_GENERAL 0x00000252UL +-#define CKM_SHA224 0x00000255UL +-#define CKM_SHA224_HMAC 0x00000256UL +-#define CKM_SHA224_HMAC_GENERAL 0x00000257UL +-#define CKM_SHA384 0x00000260UL +-#define CKM_SHA384_HMAC 0x00000261UL +-#define CKM_SHA384_HMAC_GENERAL 0x00000262UL +-#define CKM_SHA512 0x00000270UL +-#define CKM_SHA512_HMAC 0x00000271UL +-#define CKM_SHA512_HMAC_GENERAL 0x00000272UL +-#define CKM_SECURID_KEY_GEN 0x00000280UL +-#define CKM_SECURID 0x00000282UL +-#define CKM_HOTP_KEY_GEN 0x00000290UL +-#define CKM_HOTP 0x00000291UL +-#define CKM_ACTI 0x000002A0UL +-#define CKM_ACTI_KEY_GEN 0x000002A1UL +- +-#define CKM_SHA3_256 0x000002B0UL +-#define CKM_SHA3_256_HMAC 0x000002B1UL +-#define CKM_SHA3_256_HMAC_GENERAL 0x000002B2UL +-#define CKM_SHA3_256_KEY_GEN 0x000002B3UL +-#define CKM_SHA3_224 0x000002B5UL +-#define CKM_SHA3_224_HMAC 0x000002B6UL +-#define CKM_SHA3_224_HMAC_GENERAL 0x000002B7UL +-#define CKM_SHA3_224_KEY_GEN 0x000002B8UL +-#define CKM_SHA3_384 0x000002C0UL +-#define CKM_SHA3_384_HMAC 0x000002C1UL +-#define CKM_SHA3_384_HMAC_GENERAL 0x000002C2UL +-#define CKM_SHA3_384_KEY_GEN 0x000002C3UL +-#define CKM_SHA3_512 0x000002D0UL +-#define CKM_SHA3_512_HMAC 0x000002D1UL +-#define CKM_SHA3_512_HMAC_GENERAL 0x000002D2UL +-#define CKM_SHA3_512_KEY_GEN 0x000002D3UL +- +- +-#define CKM_CAST_KEY_GEN 0x00000300UL +-#define CKM_CAST_ECB 0x00000301UL +-#define CKM_CAST_CBC 0x00000302UL +-#define CKM_CAST_MAC 0x00000303UL +-#define CKM_CAST_MAC_GENERAL 0x00000304UL +-#define CKM_CAST_CBC_PAD 0x00000305UL +-#define CKM_CAST3_KEY_GEN 0x00000310UL +-#define CKM_CAST3_ECB 0x00000311UL +-#define CKM_CAST3_CBC 0x00000312UL +-#define CKM_CAST3_MAC 0x00000313UL +-#define CKM_CAST3_MAC_GENERAL 0x00000314UL +-#define CKM_CAST3_CBC_PAD 0x00000315UL ++#define CKM_RSA_PKCS_KEY_PAIR_GEN 0x00000000UL ++#define CKM_RSA_PKCS 0x00000001UL ++#define CKM_RSA_9796 0x00000002UL ++#define CKM_RSA_X_509 0x00000003UL ++ ++/* CKM_MD2_RSA_PKCS, CKM_MD5_RSA_PKCS, and CKM_SHA1_RSA_PKCS ++ * are new for v2.0. They are mechanisms which hash and sign */ ++#define CKM_MD2_RSA_PKCS 0x00000004UL ++#define CKM_MD5_RSA_PKCS 0x00000005UL ++#define CKM_SHA1_RSA_PKCS 0x00000006UL ++ ++/* CKM_RIPEMD128_RSA_PKCS, CKM_RIPEMD160_RSA_PKCS, and ++ * CKM_RSA_PKCS_OAEP are new for v2.10 */ ++#define CKM_RIPEMD128_RSA_PKCS 0x00000007UL ++#define CKM_RIPEMD160_RSA_PKCS 0x00000008UL ++#define CKM_RSA_PKCS_OAEP 0x00000009UL ++ ++/* CKM_RSA_X9_31_KEY_PAIR_GEN, CKM_RSA_X9_31, CKM_SHA1_RSA_X9_31, ++ * CKM_RSA_PKCS_PSS, and CKM_SHA1_RSA_PKCS_PSS are new for v2.11 */ ++#define CKM_RSA_X9_31_KEY_PAIR_GEN 0x0000000AUL ++#define CKM_RSA_X9_31 0x0000000BUL ++#define CKM_SHA1_RSA_X9_31 0x0000000CUL ++#define CKM_RSA_PKCS_PSS 0x0000000DUL ++#define CKM_SHA1_RSA_PKCS_PSS 0x0000000EUL ++ ++#define CKM_DSA_KEY_PAIR_GEN 0x00000010UL ++#define CKM_DSA 0x00000011UL ++#define CKM_DSA_SHA1 0x00000012UL ++ ++/* new for v2.40 */ ++#define CKM_DSA_SHA224 0x00000013UL ++#define CKM_DSA_SHA256 0x00000014UL ++#define CKM_DSA_SHA384 0x00000015UL ++#define CKM_DSA_SHA512 0x00000016UL ++#define CKM_DSA_SHA3_224 0x00000018UL ++#define CKM_DSA_SHA3_256 0x00000019UL ++#define CKM_DSA_SHA3_384 0x0000001AUL ++#define CKM_DSA_SHA3_512 0x0000001BUL ++ ++#define CKM_DH_PKCS_KEY_PAIR_GEN 0x00000020UL ++#define CKM_DH_PKCS_DERIVE 0x00000021UL ++ ++/* CKM_X9_42_DH_KEY_PAIR_GEN, CKM_X9_42_DH_DERIVE, ++ * CKM_X9_42_DH_HYBRID_DERIVE, and CKM_X9_42_MQV_DERIVE are new for ++ * v2.11 */ ++#define CKM_X9_42_DH_KEY_PAIR_GEN 0x00000030UL ++#define CKM_X9_42_DH_DERIVE 0x00000031UL ++#define CKM_X9_42_DH_HYBRID_DERIVE 0x00000032UL ++#define CKM_X9_42_MQV_DERIVE 0x00000033UL ++ ++/* CKM_SHA256/384/512 are new for v2.20 */ ++#define CKM_SHA256_RSA_PKCS 0x00000040UL ++#define CKM_SHA384_RSA_PKCS 0x00000041UL ++#define CKM_SHA512_RSA_PKCS 0x00000042UL ++#define CKM_SHA256_RSA_PKCS_PSS 0x00000043UL ++#define CKM_SHA384_RSA_PKCS_PSS 0x00000044UL ++#define CKM_SHA512_RSA_PKCS_PSS 0x00000045UL ++ ++/* CKM_SHA224 new for v2.20 amendment 3 */ ++#define CKM_SHA224_RSA_PKCS 0x00000046UL ++#define CKM_SHA224_RSA_PKCS_PSS 0x00000047UL ++ ++/* new for v2.40 */ ++#define CKM_SHA512_224 0x00000048UL ++#define CKM_SHA512_224_HMAC 0x00000049UL ++#define CKM_SHA512_224_HMAC_GENERAL 0x0000004AUL ++#define CKM_SHA512_224_KEY_DERIVATION 0x0000004BUL ++#define CKM_SHA512_256 0x0000004CUL ++#define CKM_SHA512_256_HMAC 0x0000004DUL ++#define CKM_SHA512_256_HMAC_GENERAL 0x0000004EUL ++#define CKM_SHA512_256_KEY_DERIVATION 0x0000004FUL ++#define CKM_SHA512_T 0x00000050UL ++#define CKM_SHA512_T_HMAC 0x00000051UL ++#define CKM_SHA512_T_HMAC_GENERAL 0x00000052UL ++#define CKM_SHA512_T_KEY_DERIVATION 0x00000053UL ++#define CKM_SHA3_256_RSA_PKCS 0x00000060UL ++#define CKM_SHA3_384_RSA_PKCS 0x00000061UL ++#define CKM_SHA3_512_RSA_PKCS 0x00000062UL ++#define CKM_SHA3_256_RSA_PKCS_PSS 0x00000063UL ++#define CKM_SHA3_384_RSA_PKCS_PSS 0x00000064UL ++#define CKM_SHA3_512_RSA_PKCS_PSS 0x00000065UL ++#define CKM_SHA3_224_RSA_PKCS 0x00000066UL ++#define CKM_SHA3_224_RSA_PKCS_PSS 0x00000067UL ++ ++#define CKM_RC2_KEY_GEN 0x00000100UL ++#define CKM_RC2_ECB 0x00000101UL ++#define CKM_RC2_CBC 0x00000102UL ++#define CKM_RC2_MAC 0x00000103UL ++ ++/* CKM_RC2_MAC_GENERAL and CKM_RC2_CBC_PAD are new for v2.0 */ ++#define CKM_RC2_MAC_GENERAL 0x00000104UL ++#define CKM_RC2_CBC_PAD 0x00000105UL ++ ++#define CKM_RC4_KEY_GEN 0x00000110UL ++#define CKM_RC4 0x00000111UL ++#define CKM_DES_KEY_GEN 0x00000120UL ++#define CKM_DES_ECB 0x00000121UL ++#define CKM_DES_CBC 0x00000122UL ++#define CKM_DES_MAC 0x00000123UL ++ ++/* CKM_DES_MAC_GENERAL and CKM_DES_CBC_PAD are new for v2.0 */ ++#define CKM_DES_MAC_GENERAL 0x00000124UL ++#define CKM_DES_CBC_PAD 0x00000125UL ++ ++#define CKM_DES2_KEY_GEN 0x00000130UL ++#define CKM_DES3_KEY_GEN 0x00000131UL ++#define CKM_DES3_ECB 0x00000132UL ++#define CKM_DES3_CBC 0x00000133UL ++#define CKM_DES3_MAC 0x00000134UL ++ ++/* CKM_DES3_MAC_GENERAL, CKM_DES3_CBC_PAD, CKM_CDMF_KEY_GEN, ++ * CKM_CDMF_ECB, CKM_CDMF_CBC, CKM_CDMF_MAC, ++ * CKM_CDMF_MAC_GENERAL, and CKM_CDMF_CBC_PAD are new for v2.0 */ ++#define CKM_DES3_MAC_GENERAL 0x00000135UL ++#define CKM_DES3_CBC_PAD 0x00000136UL ++#define CKM_CDMF_KEY_GEN 0x00000140UL ++#define CKM_CDMF_ECB 0x00000141UL ++#define CKM_CDMF_CBC 0x00000142UL ++#define CKM_CDMF_MAC 0x00000143UL ++#define CKM_CDMF_MAC_GENERAL 0x00000144UL ++#define CKM_CDMF_CBC_PAD 0x00000145UL ++ ++/* the following four DES mechanisms are new for v2.20 */ ++#define CKM_DES_OFB64 0x00000150UL ++#define CKM_DES_OFB8 0x00000151UL ++#define CKM_DES_CFB64 0x00000152UL ++#define CKM_DES_CFB8 0x00000153UL ++ ++#define CKM_MD2 0x00000200UL ++ ++/* CKM_MD2_HMAC and CKM_MD2_HMAC_GENERAL are new for v2.0 */ ++#define CKM_MD2_HMAC 0x00000201UL ++#define CKM_MD2_HMAC_GENERAL 0x00000202UL ++ ++#define CKM_MD5 0x00000210UL ++ ++/* CKM_MD5_HMAC and CKM_MD5_HMAC_GENERAL are new for v2.0 */ ++#define CKM_MD5_HMAC 0x00000211UL ++#define CKM_MD5_HMAC_GENERAL 0x00000212UL ++ ++#define CKM_SHA_1 0x00000220UL ++ ++/* CKM_SHA_1_HMAC and CKM_SHA_1_HMAC_GENERAL are new for v2.0 */ ++#define CKM_SHA_1_HMAC 0x00000221UL ++#define CKM_SHA_1_HMAC_GENERAL 0x00000222UL ++ ++/* CKM_RIPEMD128, CKM_RIPEMD128_HMAC, ++ * CKM_RIPEMD128_HMAC_GENERAL, CKM_RIPEMD160, CKM_RIPEMD160_HMAC, ++ * and CKM_RIPEMD160_HMAC_GENERAL are new for v2.10 */ ++#define CKM_RIPEMD128 0x00000230UL ++#define CKM_RIPEMD128_HMAC 0x00000231UL ++#define CKM_RIPEMD128_HMAC_GENERAL 0x00000232UL ++#define CKM_RIPEMD160 0x00000240UL ++#define CKM_RIPEMD160_HMAC 0x00000241UL ++#define CKM_RIPEMD160_HMAC_GENERAL 0x00000242UL ++ ++/* CKM_SHA256/384/512 are new for v2.20 */ ++#define CKM_SHA256 0x00000250UL ++#define CKM_SHA256_HMAC 0x00000251UL ++#define CKM_SHA256_HMAC_GENERAL 0x00000252UL ++#define CKM_SHA384 0x00000260UL ++#define CKM_SHA384_HMAC 0x00000261UL ++#define CKM_SHA384_HMAC_GENERAL 0x00000262UL ++#define CKM_SHA512 0x00000270UL ++#define CKM_SHA512_HMAC 0x00000271UL ++#define CKM_SHA512_HMAC_GENERAL 0x00000272UL ++ ++/* CKM_SHA224 new for v2.20 amendment 3 */ ++#define CKM_SHA224 0x00000255UL ++#define CKM_SHA224_HMAC 0x00000256UL ++#define CKM_SHA224_HMAC_GENERAL 0x00000257UL ++ ++/* new for v2.40 */ ++#define CKM_SECURID_KEY_GEN 0x00000280UL ++#define CKM_SECURID 0x00000282UL ++#define CKM_HOTP_KEY_GEN 0x00000290UL ++#define CKM_HOTP 0x00000291UL ++#define CKM_ACTI 0x000002A0UL ++#define CKM_ACTI_KEY_GEN 0x000002A1UL ++#define CKM_SHA3_256 0x000002B0UL ++#define CKM_SHA3_256_HMAC 0x000002B1UL ++#define CKM_SHA3_256_HMAC_GENERAL 0x000002B2UL ++#define CKM_SHA3_256_KEY_GEN 0x000002B3UL ++#define CKM_SHA3_224 0x000002B5UL ++#define CKM_SHA3_224_HMAC 0x000002B6UL ++#define CKM_SHA3_224_HMAC_GENERAL 0x000002B7UL ++#define CKM_SHA3_224_KEY_GEN 0x000002B8UL ++#define CKM_SHA3_384 0x000002C0UL ++#define CKM_SHA3_384_HMAC 0x000002C1UL ++#define CKM_SHA3_384_HMAC_GENERAL 0x000002C2UL ++#define CKM_SHA3_384_KEY_GEN 0x000002C3UL ++#define CKM_SHA3_512 0x000002D0UL ++#define CKM_SHA3_512_HMAC 0x000002D1UL ++#define CKM_SHA3_512_HMAC_GENERAL 0x000002D2UL ++#define CKM_SHA3_512_KEY_GEN 0x000002D3UL ++ ++/* All of the following mechanisms are new for v2.0 */ + /* Note that CAST128 and CAST5 are the same algorithm */ +-#define CKM_CAST5_KEY_GEN 0x00000320UL +-#define CKM_CAST128_KEY_GEN 0x00000320UL +-#define CKM_CAST5_ECB 0x00000321UL +-#define CKM_CAST128_ECB 0x00000321UL +-#define CKM_CAST5_CBC 0x00000322UL /* Deprecated */ +-#define CKM_CAST128_CBC 0x00000322UL +-#define CKM_CAST5_MAC 0x00000323UL /* Deprecated */ +-#define CKM_CAST128_MAC 0x00000323UL +-#define CKM_CAST5_MAC_GENERAL 0x00000324UL /* Deprecated */ +-#define CKM_CAST128_MAC_GENERAL 0x00000324UL +-#define CKM_CAST5_CBC_PAD 0x00000325UL /* Deprecated */ +-#define CKM_CAST128_CBC_PAD 0x00000325UL +-#define CKM_RC5_KEY_GEN 0x00000330UL +-#define CKM_RC5_ECB 0x00000331UL +-#define CKM_RC5_CBC 0x00000332UL +-#define CKM_RC5_MAC 0x00000333UL +-#define CKM_RC5_MAC_GENERAL 0x00000334UL +-#define CKM_RC5_CBC_PAD 0x00000335UL +-#define CKM_IDEA_KEY_GEN 0x00000340UL +-#define CKM_IDEA_ECB 0x00000341UL +-#define CKM_IDEA_CBC 0x00000342UL +-#define CKM_IDEA_MAC 0x00000343UL +-#define CKM_IDEA_MAC_GENERAL 0x00000344UL +-#define CKM_IDEA_CBC_PAD 0x00000345UL +-#define CKM_GENERIC_SECRET_KEY_GEN 0x00000350UL +-#define CKM_CONCATENATE_BASE_AND_KEY 0x00000360UL +-#define CKM_CONCATENATE_BASE_AND_DATA 0x00000362UL +-#define CKM_CONCATENATE_DATA_AND_BASE 0x00000363UL +-#define CKM_XOR_BASE_AND_DATA 0x00000364UL +-#define CKM_EXTRACT_KEY_FROM_KEY 0x00000365UL +-#define CKM_SSL3_PRE_MASTER_KEY_GEN 0x00000370UL +-#define CKM_SSL3_MASTER_KEY_DERIVE 0x00000371UL +-#define CKM_SSL3_KEY_AND_MAC_DERIVE 0x00000372UL +- +-#define CKM_SSL3_MASTER_KEY_DERIVE_DH 0x00000373UL +-#define CKM_TLS_PRE_MASTER_KEY_GEN 0x00000374UL +-#define CKM_TLS_MASTER_KEY_DERIVE 0x00000375UL +-#define CKM_TLS_KEY_AND_MAC_DERIVE 0x00000376UL +-#define CKM_TLS_MASTER_KEY_DERIVE_DH 0x00000377UL +- +-#define CKM_TLS_PRF 0x00000378UL +- +-#define CKM_SSL3_MD5_MAC 0x00000380UL +-#define CKM_SSL3_SHA1_MAC 0x00000381UL +-#define CKM_MD5_KEY_DERIVATION 0x00000390UL +-#define CKM_MD2_KEY_DERIVATION 0x00000391UL +-#define CKM_SHA1_KEY_DERIVATION 0x00000392UL +- +-#define CKM_SHA256_KEY_DERIVATION 0x00000393UL +-#define CKM_SHA384_KEY_DERIVATION 0x00000394UL +-#define CKM_SHA512_KEY_DERIVATION 0x00000395UL +-#define CKM_SHA224_KEY_DERIVATION 0x00000396UL +-#define CKM_SHA3_256_KEY_DERIVATION 0x00000397UL +-#define CKM_SHA3_224_KEY_DERIVATION 0x00000398UL +-#define CKM_SHA3_384_KEY_DERIVATION 0x00000399UL +-#define CKM_SHA3_512_KEY_DERIVATION 0x0000039AUL +-#define CKM_SHAKE_128_KEY_DERIVATION 0x0000039BUL +-#define CKM_SHAKE_256_KEY_DERIVATION 0x0000039CUL +-#define CKM_SHA3_256_KEY_DERIVE CKM_SHA3_256_KEY_DERIVATION +-#define CKM_SHA3_224_KEY_DERIVE CKM_SHA3_224_KEY_DERIVATION +-#define CKM_SHA3_384_KEY_DERIVE CKM_SHA3_384_KEY_DERIVATION +-#define CKM_SHA3_512_KEY_DERIVE CKM_SHA3_512_KEY_DERIVATION +-#define CKM_SHAKE_128_KEY_DERIVE CKM_SHAKE_128_KEY_DERIVATION +-#define CKM_SHAKE_256_KEY_DERIVE CKM_SHAKE_256_KEY_DERIVATION +- +-#define CKM_PBE_MD2_DES_CBC 0x000003A0UL +-#define CKM_PBE_MD5_DES_CBC 0x000003A1UL +-#define CKM_PBE_MD5_CAST_CBC 0x000003A2UL +-#define CKM_PBE_MD5_CAST3_CBC 0x000003A3UL +-#define CKM_PBE_MD5_CAST5_CBC 0x000003A4UL /* Deprecated */ +-#define CKM_PBE_MD5_CAST128_CBC 0x000003A4UL +-#define CKM_PBE_SHA1_CAST5_CBC 0x000003A5UL /* Deprecated */ +-#define CKM_PBE_SHA1_CAST128_CBC 0x000003A5UL +-#define CKM_PBE_SHA1_RC4_128 0x000003A6UL +-#define CKM_PBE_SHA1_RC4_40 0x000003A7UL +-#define CKM_PBE_SHA1_DES3_EDE_CBC 0x000003A8UL +-#define CKM_PBE_SHA1_DES2_EDE_CBC 0x000003A9UL +-#define CKM_PBE_SHA1_RC2_128_CBC 0x000003AAUL +-#define CKM_PBE_SHA1_RC2_40_CBC 0x000003ABUL +- +-#define CKM_PKCS5_PBKD2 0x000003B0UL +- +-#define CKM_PBA_SHA1_WITH_SHA1_HMAC 0x000003C0UL +- +-#define CKM_WTLS_PRE_MASTER_KEY_GEN 0x000003D0UL +-#define CKM_WTLS_MASTER_KEY_DERIVE 0x000003D1UL +-#define CKM_WTLS_MASTER_KEY_DERIVE_DH_ECC 0x000003D2UL +-#define CKM_WTLS_PRF 0x000003D3UL +-#define CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE 0x000003D4UL +-#define CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE 0x000003D5UL +- +-#define CKM_TLS12_MAC 0x000003D8UL +-#define CKM_TLS12_KDF 0x000003D9UL +-#define CKM_TLS12_MASTER_KEY_DERIVE 0x000003E0UL +-#define CKM_TLS12_KEY_AND_MAC_DERIVE 0x000003E1UL +-#define CKM_TLS12_MASTER_KEY_DERIVE_DH 0x000003E2UL +-#define CKM_TLS12_KEY_SAFE_DERIVE 0x000003E3UL +-#define CKM_TLS_MAC 0x000003E4UL +-#define CKM_TLS_KDF 0x000003E5UL +- +-#define CKM_KEY_WRAP_LYNKS 0x00000400UL +-#define CKM_KEY_WRAP_SET_OAEP 0x00000401UL +- +-#define CKM_CMS_SIG 0x00000500UL +-#define CKM_KIP_DERIVE 0x00000510UL +-#define CKM_KIP_WRAP 0x00000511UL +-#define CKM_KIP_MAC 0x00000512UL +- +-#define CKM_CAMELLIA_KEY_GEN 0x00000550UL +-#define CKM_CAMELLIA_ECB 0x00000551UL +-#define CKM_CAMELLIA_CBC 0x00000552UL +-#define CKM_CAMELLIA_MAC 0x00000553UL +-#define CKM_CAMELLIA_MAC_GENERAL 0x00000554UL +-#define CKM_CAMELLIA_CBC_PAD 0x00000555UL +-#define CKM_CAMELLIA_ECB_ENCRYPT_DATA 0x00000556UL +-#define CKM_CAMELLIA_CBC_ENCRYPT_DATA 0x00000557UL +-#define CKM_CAMELLIA_CTR 0x00000558UL +- +-#define CKM_ARIA_KEY_GEN 0x00000560UL +-#define CKM_ARIA_ECB 0x00000561UL +-#define CKM_ARIA_CBC 0x00000562UL +-#define CKM_ARIA_MAC 0x00000563UL +-#define CKM_ARIA_MAC_GENERAL 0x00000564UL +-#define CKM_ARIA_CBC_PAD 0x00000565UL +-#define CKM_ARIA_ECB_ENCRYPT_DATA 0x00000566UL +-#define CKM_ARIA_CBC_ENCRYPT_DATA 0x00000567UL +- +-#define CKM_SEED_KEY_GEN 0x00000650UL +-#define CKM_SEED_ECB 0x00000651UL +-#define CKM_SEED_CBC 0x00000652UL +-#define CKM_SEED_MAC 0x00000653UL +-#define CKM_SEED_MAC_GENERAL 0x00000654UL +-#define CKM_SEED_CBC_PAD 0x00000655UL +-#define CKM_SEED_ECB_ENCRYPT_DATA 0x00000656UL +-#define CKM_SEED_CBC_ENCRYPT_DATA 0x00000657UL +- +-#define CKM_SKIPJACK_KEY_GEN 0x00001000UL +-#define CKM_SKIPJACK_ECB64 0x00001001UL +-#define CKM_SKIPJACK_CBC64 0x00001002UL +-#define CKM_SKIPJACK_OFB64 0x00001003UL +-#define CKM_SKIPJACK_CFB64 0x00001004UL +-#define CKM_SKIPJACK_CFB32 0x00001005UL +-#define CKM_SKIPJACK_CFB16 0x00001006UL +-#define CKM_SKIPJACK_CFB8 0x00001007UL +-#define CKM_SKIPJACK_WRAP 0x00001008UL +-#define CKM_SKIPJACK_PRIVATE_WRAP 0x00001009UL +-#define CKM_SKIPJACK_RELAYX 0x0000100aUL +-#define CKM_KEA_KEY_PAIR_GEN 0x00001010UL +-#define CKM_KEA_KEY_DERIVE 0x00001011UL +-#define CKM_KEA_DERIVE 0x00001012UL +-#define CKM_FORTEZZA_TIMESTAMP 0x00001020UL +-#define CKM_BATON_KEY_GEN 0x00001030UL +-#define CKM_BATON_ECB128 0x00001031UL +-#define CKM_BATON_ECB96 0x00001032UL +-#define CKM_BATON_CBC128 0x00001033UL +-#define CKM_BATON_COUNTER 0x00001034UL +-#define CKM_BATON_SHUFFLE 0x00001035UL +-#define CKM_BATON_WRAP 0x00001036UL +- +-#define CKM_ECDSA_KEY_PAIR_GEN 0x00001040UL /* Deprecated */ +-#define CKM_EC_KEY_PAIR_GEN 0x00001040UL +- +-#define CKM_ECDSA 0x00001041UL +-#define CKM_ECDSA_SHA1 0x00001042UL +-#define CKM_ECDSA_SHA224 0x00001043UL +-#define CKM_ECDSA_SHA256 0x00001044UL +-#define CKM_ECDSA_SHA384 0x00001045UL +-#define CKM_ECDSA_SHA512 0x00001046UL ++#define CKM_CAST_KEY_GEN 0x00000300UL ++#define CKM_CAST_ECB 0x00000301UL ++#define CKM_CAST_CBC 0x00000302UL ++#define CKM_CAST_MAC 0x00000303UL ++#define CKM_CAST_MAC_GENERAL 0x00000304UL ++#define CKM_CAST_CBC_PAD 0x00000305UL ++#define CKM_CAST3_KEY_GEN 0x00000310UL ++#define CKM_CAST3_ECB 0x00000311UL ++#define CKM_CAST3_CBC 0x00000312UL ++#define CKM_CAST3_MAC 0x00000313UL ++#define CKM_CAST3_MAC_GENERAL 0x00000314UL ++#define CKM_CAST3_CBC_PAD 0x00000315UL ++#define CKM_CAST5_KEY_GEN 0x00000320UL ++#define CKM_CAST128_KEY_GEN 0x00000320UL ++#define CKM_CAST5_ECB 0x00000321UL ++#define CKM_CAST128_ECB 0x00000321UL ++#define CKM_CAST5_CBC 0x00000322UL ++#define CKM_CAST128_CBC 0x00000322UL ++#define CKM_CAST5_MAC 0x00000323UL ++#define CKM_CAST128_MAC 0x00000323UL ++#define CKM_CAST5_MAC_GENERAL 0x00000324UL ++#define CKM_CAST128_MAC_GENERAL 0x00000324UL ++#define CKM_CAST5_CBC_PAD 0x00000325UL ++#define CKM_CAST128_CBC_PAD 0x00000325UL ++#define CKM_RC5_KEY_GEN 0x00000330UL ++#define CKM_RC5_ECB 0x00000331UL ++#define CKM_RC5_CBC 0x00000332UL ++#define CKM_RC5_MAC 0x00000333UL ++#define CKM_RC5_MAC_GENERAL 0x00000334UL ++#define CKM_RC5_CBC_PAD 0x00000335UL ++#define CKM_IDEA_KEY_GEN 0x00000340UL ++#define CKM_IDEA_ECB 0x00000341UL ++#define CKM_IDEA_CBC 0x00000342UL ++#define CKM_IDEA_MAC 0x00000343UL ++#define CKM_IDEA_MAC_GENERAL 0x00000344UL ++#define CKM_IDEA_CBC_PAD 0x00000345UL ++#define CKM_GENERIC_SECRET_KEY_GEN 0x00000350UL ++#define CKM_CONCATENATE_BASE_AND_KEY 0x00000360UL ++#define CKM_CONCATENATE_BASE_AND_DATA 0x00000362UL ++#define CKM_CONCATENATE_DATA_AND_BASE 0x00000363UL ++#define CKM_XOR_BASE_AND_DATA 0x00000364UL ++#define CKM_EXTRACT_KEY_FROM_KEY 0x00000365UL ++#define CKM_SSL3_PRE_MASTER_KEY_GEN 0x00000370UL ++#define CKM_SSL3_MASTER_KEY_DERIVE 0x00000371UL ++#define CKM_SSL3_KEY_AND_MAC_DERIVE 0x00000372UL ++ ++/* CKM_SSL3_MASTER_KEY_DERIVE_DH, CKM_TLS_PRE_MASTER_KEY_GEN, ++ * CKM_TLS_MASTER_KEY_DERIVE, CKM_TLS_KEY_AND_MAC_DERIVE, and ++ * CKM_TLS_MASTER_KEY_DERIVE_DH are new for v2.11 */ ++#define CKM_SSL3_MASTER_KEY_DERIVE_DH 0x00000373UL ++#define CKM_TLS_PRE_MASTER_KEY_GEN 0x00000374UL ++#define CKM_TLS_MASTER_KEY_DERIVE 0x00000375UL ++#define CKM_TLS_KEY_AND_MAC_DERIVE 0x00000376UL ++#define CKM_TLS_MASTER_KEY_DERIVE_DH 0x00000377UL ++ ++/* CKM_TLS_PRF is new for v2.20 */ ++#define CKM_TLS_PRF 0x00000378UL ++ ++#define CKM_SSL3_MD5_MAC 0x00000380UL ++#define CKM_SSL3_SHA1_MAC 0x00000381UL ++#define CKM_MD5_KEY_DERIVATION 0x00000390UL ++#define CKM_MD2_KEY_DERIVATION 0x00000391UL ++#define CKM_SHA1_KEY_DERIVATION 0x00000392UL ++ ++/* CKM_SHA256/384/512 are new for v2.20 */ ++#define CKM_SHA256_KEY_DERIVATION 0x00000393UL ++#define CKM_SHA384_KEY_DERIVATION 0x00000394UL ++#define CKM_SHA512_KEY_DERIVATION 0x00000395UL ++ ++/* CKM_SHA224 new for v2.20 amendment 3 */ ++#define CKM_SHA224_KEY_DERIVATION 0x00000396UL ++ ++/* new for v2.40 */ ++#define CKM_SHA3_256_KEY_DERIVATION 0x00000397UL ++#define CKM_SHA3_224_KEY_DERIVATION 0x00000398UL ++#define CKM_SHA3_384_KEY_DERIVATION 0x00000399UL ++#define CKM_SHA3_512_KEY_DERIVATION 0x0000039AUL ++#define CKM_SHAKE_128_KEY_DERIVATION 0x0000039BUL ++#define CKM_SHAKE_256_KEY_DERIVATION 0x0000039CUL ++ ++#define CKM_PBE_MD2_DES_CBC 0x000003A0UL ++#define CKM_PBE_MD5_DES_CBC 0x000003A1UL ++#define CKM_PBE_MD5_CAST_CBC 0x000003A2UL ++#define CKM_PBE_MD5_CAST3_CBC 0x000003A3UL ++#define CKM_PBE_MD5_CAST5_CBC 0x000003A4UL ++#define CKM_PBE_MD5_CAST128_CBC 0x000003A4UL ++#define CKM_PBE_SHA1_CAST5_CBC 0x000003A5UL ++#define CKM_PBE_SHA1_CAST128_CBC 0x000003A5UL ++#define CKM_PBE_SHA1_RC4_128 0x000003A6UL ++#define CKM_PBE_SHA1_RC4_40 0x000003A7UL ++#define CKM_PBE_SHA1_DES3_EDE_CBC 0x000003A8UL ++#define CKM_PBE_SHA1_DES2_EDE_CBC 0x000003A9UL ++#define CKM_PBE_SHA1_RC2_128_CBC 0x000003AAUL ++#define CKM_PBE_SHA1_RC2_40_CBC 0x000003ABUL ++ ++/* CKM_PKCS5_PBKD2 is new for v2.10 */ ++#define CKM_PKCS5_PBKD2 0x000003B0UL ++ ++#define CKM_PBA_SHA1_WITH_SHA1_HMAC 0x000003C0UL ++ ++/* WTLS mechanisms are new for v2.20 */ ++#define CKM_WTLS_PRE_MASTER_KEY_GEN 0x000003D0UL ++#define CKM_WTLS_MASTER_KEY_DERIVE 0x000003D1UL ++#define CKM_WTLS_MASTER_KEY_DERIVE_DH_ECC 0x000003D2UL ++#define CKM_WTLS_PRF 0x000003D3UL ++#define CKM_WTLS_SERVER_KEY_AND_MAC_DERIVE 0x000003D4UL ++#define CKM_WTLS_CLIENT_KEY_AND_MAC_DERIVE 0x000003D5UL ++ ++/* TLS 1.2 mechanisms are new for v2.40 */ ++#define CKM_TLS12_MASTER_KEY_DERIVE 0x000003E0UL ++#define CKM_TLS12_KEY_AND_MAC_DERIVE 0x000003E1UL ++#define CKM_TLS12_MASTER_KEY_DERIVE_DH 0x000003E2UL ++#define CKM_TLS12_KEY_SAFE_DERIVE 0x000003E3UL ++#define CKM_TLS12_MAC 0x000003D8UL ++#define CKM_TLS12_KDF 0x000003D9UL ++#define CKM_TLS_MAC 0x000003E4UL ++#define CKM_TLS_KDF 0x000003E5UL ++ ++#define CKM_KEY_WRAP_LYNKS 0x00000400UL ++#define CKM_KEY_WRAP_SET_OAEP 0x00000401UL ++ ++/* CKM_CMS_SIG is new for v2.20 */ ++#define CKM_CMS_SIG 0x00000500UL ++ ++/* new for 2.40 */ ++#define CKM_KIP_DERIVE 0x00000510UL ++#define CKM_KIP_WRAP 0x00000511UL ++#define CKM_KIP_MAC 0x00000512UL ++ ++/* Fortezza mechanisms */ ++#define CKM_SKIPJACK_KEY_GEN 0x00001000UL ++#define CKM_SKIPJACK_ECB64 0x00001001UL ++#define CKM_SKIPJACK_CBC64 0x00001002UL ++#define CKM_SKIPJACK_OFB64 0x00001003UL ++#define CKM_SKIPJACK_CFB64 0x00001004UL ++#define CKM_SKIPJACK_CFB32 0x00001005UL ++#define CKM_SKIPJACK_CFB16 0x00001006UL ++#define CKM_SKIPJACK_CFB8 0x00001007UL ++#define CKM_SKIPJACK_WRAP 0x00001008UL ++#define CKM_SKIPJACK_PRIVATE_WRAP 0x00001009UL ++#define CKM_SKIPJACK_RELAYX 0x0000100aUL ++#define CKM_KEA_KEY_PAIR_GEN 0x00001010UL ++#define CKM_KEA_KEY_DERIVE 0x00001011UL ++#define CKM_FORTEZZA_TIMESTAMP 0x00001020UL ++#define CKM_BATON_KEY_GEN 0x00001030UL ++#define CKM_BATON_ECB128 0x00001031UL ++#define CKM_BATON_ECB96 0x00001032UL ++#define CKM_BATON_CBC128 0x00001033UL ++#define CKM_BATON_COUNTER 0x00001034UL ++#define CKM_BATON_SHUFFLE 0x00001035UL ++#define CKM_BATON_WRAP 0x00001036UL ++ ++/* CKM_ECDSA_KEY_PAIR_GEN is deprecated in v2.11, ++ * CKM_EC_KEY_PAIR_GEN is preferred */ ++#define CKM_ECDSA_KEY_PAIR_GEN 0x00001040UL ++#define CKM_EC_KEY_PAIR_GEN 0x00001040UL ++ ++#define CKM_ECDSA 0x00001041UL ++#define CKM_ECDSA_SHA1 0x00001042UL ++ ++/* new for v2.40 */ ++#define CKM_ECDSA_SHA224 0x00001043UL ++#define CKM_ECDSA_SHA256 0x00001044UL ++#define CKM_ECDSA_SHA384 0x00001045UL ++#define CKM_ECDSA_SHA512 0x00001046UL + #define CKM_EC_KEY_PAIR_GEN_W_EXTRA_BITS 0x0000140BUL + +-#define CKM_ECDH1_DERIVE 0x00001050UL +-#define CKM_ECDH1_COFACTOR_DERIVE 0x00001051UL +-#define CKM_ECMQV_DERIVE 0x00001052UL +- +-#define CKM_ECDH_AES_KEY_WRAP 0x00001053UL +-#define CKM_RSA_AES_KEY_WRAP 0x00001054UL +- +-#define CKM_JUNIPER_KEY_GEN 0x00001060UL +-#define CKM_JUNIPER_ECB128 0x00001061UL +-#define CKM_JUNIPER_CBC128 0x00001062UL +-#define CKM_JUNIPER_COUNTER 0x00001063UL +-#define CKM_JUNIPER_SHUFFLE 0x00001064UL +-#define CKM_JUNIPER_WRAP 0x00001065UL +-#define CKM_FASTHASH 0x00001070UL +- +-#define CKM_AES_XTS 0x00001071UL +-#define CKM_AES_XTS_KEY_GEN 0x00001072UL +-#define CKM_AES_KEY_GEN 0x00001080UL +-#define CKM_AES_ECB 0x00001081UL +-#define CKM_AES_CBC 0x00001082UL +-#define CKM_AES_MAC 0x00001083UL +-#define CKM_AES_MAC_GENERAL 0x00001084UL +-#define CKM_AES_CBC_PAD 0x00001085UL +-#define CKM_AES_CTR 0x00001086UL +-#define CKM_AES_GCM 0x00001087UL +-#define CKM_AES_CCM 0x00001088UL +-#define CKM_AES_CTS 0x00001089UL +-#define CKM_AES_CMAC 0x0000108AUL +-#define CKM_AES_CMAC_GENERAL 0x0000108BUL +- +-#define CKM_AES_XCBC_MAC 0x0000108CUL +-#define CKM_AES_XCBC_MAC_96 0x0000108DUL +-#define CKM_AES_GMAC 0x0000108EUL +- +-#define CKM_BLOWFISH_KEY_GEN 0x00001090UL +-#define CKM_BLOWFISH_CBC 0x00001091UL +-#define CKM_TWOFISH_KEY_GEN 0x00001092UL +-#define CKM_TWOFISH_CBC 0x00001093UL +-#define CKM_BLOWFISH_CBC_PAD 0x00001094UL +-#define CKM_TWOFISH_CBC_PAD 0x00001095UL +- +-#define CKM_DES_ECB_ENCRYPT_DATA 0x00001100UL +-#define CKM_DES_CBC_ENCRYPT_DATA 0x00001101UL +-#define CKM_DES3_ECB_ENCRYPT_DATA 0x00001102UL +-#define CKM_DES3_CBC_ENCRYPT_DATA 0x00001103UL +-#define CKM_AES_ECB_ENCRYPT_DATA 0x00001104UL +-#define CKM_AES_CBC_ENCRYPT_DATA 0x00001105UL +- +-#define CKM_GOSTR3410_KEY_PAIR_GEN 0x00001200UL +-#define CKM_GOSTR3410 0x00001201UL +-#define CKM_GOSTR3410_WITH_GOSTR3411 0x00001202UL +-#define CKM_GOSTR3410_KEY_WRAP 0x00001203UL +-#define CKM_GOSTR3410_DERIVE 0x00001204UL +-#define CKM_GOSTR3411 0x00001210UL +-#define CKM_GOSTR3411_HMAC 0x00001211UL +-#define CKM_GOST28147_KEY_GEN 0x00001220UL +-#define CKM_GOST28147_ECB 0x00001221UL +-#define CKM_GOST28147 0x00001222UL +-#define CKM_GOST28147_MAC 0x00001223UL +-#define CKM_GOST28147_KEY_WRAP 0x00001224UL +-#define CKM_CHACHA20_KEY_GEN 0x00001225UL +-#define CKM_CHACHA20 0x00001226UL +-#define CKM_POLY1305_KEY_GEN 0x00001227UL +-#define CKM_POLY1305 0x00001228UL +-#define CKM_DSA_PARAMETER_GEN 0x00002000UL +-#define CKM_DH_PKCS_PARAMETER_GEN 0x00002001UL +-#define CKM_X9_42_DH_PARAMETER_GEN 0x00002002UL +-#define CKM_DSA_PROBABILISTIC_PARAMETER_GEN 0x00002003UL +-#define CKM_DSA_PROBABLISTIC_PARAMETER_GEN CKM_DSA_PROBABILISTIC_PARAMETER_GEN +-#define CKM_DSA_SHAWE_TAYLOR_PARAMETER_GEN 0x00002004UL +-#define CKM_DSA_FIPS_G_GEN 0x00002005UL +- +-#define CKM_AES_OFB 0x00002104UL +-#define CKM_AES_CFB64 0x00002105UL +-#define CKM_AES_CFB8 0x00002106UL +-#define CKM_AES_CFB128 0x00002107UL +- +-#define CKM_AES_CFB1 0x00002108UL +-#define CKM_AES_KEY_WRAP 0x00002109UL /* WAS: 0x00001090 */ +-#define CKM_AES_KEY_WRAP_PAD 0x0000210AUL /* WAS: 0x00001091 */ +-#define CKM_AES_KEY_WRAP_KWP 0x0000210BUL +- +-#define CKM_RSA_PKCS_TPM_1_1 0x00004001UL +-#define CKM_RSA_PKCS_OAEP_TPM_1_1 0x00004002UL +- +-#define CKM_SHA_1_KEY_GEN 0x00004003UL +-#define CKM_SHA224_KEY_GEN 0x00004004UL +-#define CKM_SHA256_KEY_GEN 0x00004005UL +-#define CKM_SHA384_KEY_GEN 0x00004006UL +-#define CKM_SHA512_KEY_GEN 0x00004007UL +-#define CKM_SHA512_224_KEY_GEN 0x00004008UL +-#define CKM_SHA512_256_KEY_GEN 0x00004009UL +-#define CKM_SHA512_T_KEY_GEN 0x0000400aUL +-#define CKM_NULL 0x0000400bUL +-#define CKM_BLAKE2B_160 0x0000400cUL +-#define CKM_BLAKE2B_160_HMAC 0x0000400dUL +-#define CKM_BLAKE2B_160_HMAC_GENERAL 0x0000400eUL +-#define CKM_BLAKE2B_160_KEY_DERIVE 0x0000400fUL +-#define CKM_BLAKE2B_160_KEY_GEN 0x00004010UL +-#define CKM_BLAKE2B_256 0x00004011UL +-#define CKM_BLAKE2B_256_HMAC 0x00004012UL +-#define CKM_BLAKE2B_256_HMAC_GENERAL 0x00004013UL +-#define CKM_BLAKE2B_256_KEY_DERIVE 0x00004014UL +-#define CKM_BLAKE2B_256_KEY_GEN 0x00004015UL +-#define CKM_BLAKE2B_384 0x00004016UL +-#define CKM_BLAKE2B_384_HMAC 0x00004017UL +-#define CKM_BLAKE2B_384_HMAC_GENERAL 0x00004018UL +-#define CKM_BLAKE2B_384_KEY_DERIVE 0x00004019UL +-#define CKM_BLAKE2B_384_KEY_GEN 0x0000401aUL +-#define CKM_BLAKE2B_512 0x0000401bUL +-#define CKM_BLAKE2B_512_HMAC 0x0000401cUL +-#define CKM_BLAKE2B_512_HMAC_GENERAL 0x0000401dUL +-#define CKM_BLAKE2B_512_KEY_DERIVE 0x0000401eUL +-#define CKM_BLAKE2B_512_KEY_GEN 0x0000401fUL +-#define CKM_SALSA20 0x00004020UL +-#define CKM_CHACHA20_POLY1305 0x00004021UL +-#define CKM_SALSA20_POLY1305 0x00004022UL +-#define CKM_X3DH_INITIALIZE 0x00004023UL +-#define CKM_X3DH_RESPOND 0x00004024UL +-#define CKM_X2RATCHET_INITIALIZE 0x00004025UL +-#define CKM_X2RATCHET_RESPOND 0x00004026UL +-#define CKM_X2RATCHET_ENCRYPT 0x00004027UL +-#define CKM_X2RATCHET_DECRYPT 0x00004028UL +-#define CKM_XEDDSA 0x00004029UL +-#define CKM_HKDF_DERIVE 0x0000402aUL +-#define CKM_HKDF_DATA 0x0000402bUL +-#define CKM_HKDF_KEY_GEN 0x0000402cUL +-#define CKM_SALSA20_KEY_GEN 0x0000402dUL +- +-#define CKM_ECDSA_SHA3_224 0x00001047UL +-#define CKM_ECDSA_SHA3_256 0x00001048UL +-#define CKM_ECDSA_SHA3_384 0x00001049UL +-#define CKM_ECDSA_SHA3_512 0x0000104aUL +-#define CKM_EC_EDWARDS_KEY_PAIR_GEN 0x00001055UL ++/* CKM_ECDH1_DERIVE, CKM_ECDH1_COFACTOR_DERIVE, and CKM_ECMQV_DERIVE ++ * are new for v2.11 */ ++#define CKM_ECDH1_DERIVE 0x00001050UL ++#define CKM_ECDH1_COFACTOR_DERIVE 0x00001051UL ++#define CKM_ECMQV_DERIVE 0x00001052UL ++ ++/* new for v2.40 */ ++#define CKM_ECDH_AES_KEY_WRAP 0x00001053UL ++#define CKM_RSA_AES_KEY_WRAP 0x00001054UL ++ ++#define CKM_JUNIPER_KEY_GEN 0x00001060UL ++#define CKM_JUNIPER_ECB128 0x00001061UL ++#define CKM_JUNIPER_CBC128 0x00001062UL ++#define CKM_JUNIPER_COUNTER 0x00001063UL ++#define CKM_JUNIPER_SHUFFLE 0x00001064UL ++#define CKM_JUNIPER_WRAP 0x00001065UL ++#define CKM_FASTHASH 0x00001070UL ++ ++/* CKM_AES_KEY_GEN, CKM_AES_ECB, CKM_AES_CBC, CKM_AES_MAC, ++ * CKM_AES_MAC_GENERAL, CKM_AES_CBC_PAD, CKM_DSA_PARAMETER_GEN, ++ * CKM_DH_PKCS_PARAMETER_GEN, and CKM_X9_42_DH_PARAMETER_GEN are ++ * new for v2.11 */ ++#define CKM_AES_KEY_GEN 0x00001080UL ++#define CKM_AES_ECB 0x00001081UL ++#define CKM_AES_CBC 0x00001082UL ++#define CKM_AES_MAC 0x00001083UL ++#define CKM_AES_MAC_GENERAL 0x00001084UL ++#define CKM_AES_CBC_PAD 0x00001085UL ++/* new for v2.20 amendment 3 */ ++#define CKM_AES_CTR 0x00001086UL ++/* new for v2.30 */ ++#define CKM_AES_GCM 0x00001087UL ++#define CKM_AES_CCM 0x00001088UL ++#define CKM_AES_CTS 0x00001089UL ++/* AES-CMAC values copied from v2.40 errata 1 header file */ ++#define CKM_AES_CMAC 0x0000108AUL ++#define CKM_AES_CMAC_GENERAL 0x0000108BUL ++#define CKM_AES_XCBC_MAC 0x0000108CUL ++#define CKM_AES_XCBC_MAC_96 0x0000108DUL ++ ++/* BlowFish and TwoFish are new for v2.20 */ ++#define CKM_BLOWFISH_KEY_GEN 0x00001090UL ++#define CKM_BLOWFISH_CBC 0x00001091UL ++#define CKM_TWOFISH_KEY_GEN 0x00001092UL ++#define CKM_TWOFISH_CBC 0x00001093UL ++ ++/* new for v2.40 */ ++#define CKM_BLOWFISH_CBC_PAD 0x00001094UL ++#define CKM_TWOFISH_CBC_PAD 0x00001095UL ++ ++/* Camellia is proposed for v2.20 Amendment 3 */ ++#define CKM_CAMELLIA_KEY_GEN 0x00000550UL ++#define CKM_CAMELLIA_ECB 0x00000551UL ++#define CKM_CAMELLIA_CBC 0x00000552UL ++#define CKM_CAMELLIA_MAC 0x00000553UL ++#define CKM_CAMELLIA_MAC_GENERAL 0x00000554UL ++#define CKM_CAMELLIA_CBC_PAD 0x00000555UL ++#define CKM_CAMELLIA_ECB_ENCRYPT_DATA 0x00000556UL ++#define CKM_CAMELLIA_CBC_ENCRYPT_DATA 0x00000557UL ++ ++/* new for v2.40 */ ++#define CKM_ARIA_KEY_GEN 0x00000560UL ++#define CKM_ARIA_ECB 0x00000561UL ++#define CKM_ARIA_CBC 0x00000562UL ++#define CKM_ARIA_MAC 0x00000563UL ++#define CKM_ARIA_MAC_GENERAL 0x00000564UL ++#define CKM_ARIA_CBC_PAD 0x00000565UL ++#define CKM_ARIA_ECB_ENCRYPT_DATA 0x00000566UL ++#define CKM_ARIA_CBC_ENCRYPT_DATA 0x00000567UL ++ ++#define CKM_SEED_KEY_GEN 0x00000650UL ++#define CKM_SEED_ECB 0x00000651UL ++#define CKM_SEED_CBC 0x00000652UL ++#define CKM_SEED_MAC 0x00000653UL ++#define CKM_SEED_MAC_GENERAL 0x00000654UL ++#define CKM_SEED_CBC_PAD 0x00000655UL ++#define CKM_SEED_ECB_ENCRYPT_DATA 0x00000656UL ++#define CKM_SEED_CBC_ENCRYPT_DATA 0x00000657UL ++ ++/* new for v2.40 */ ++#define CKM_ECDSA_SHA3_224 0x00001047UL ++#define CKM_ECDSA_SHA3_256 0x00001048UL ++#define CKM_ECDSA_SHA3_384 0x00001049UL ++#define CKM_ECDSA_SHA3_512 0x0000104aUL ++#define CKM_EC_EDWARDS_KEY_PAIR_GEN 0x00001055UL + #define CKM_EC_MONTGOMERY_KEY_PAIR_GEN 0x00001056UL +-#define CKM_EDDSA 0x00001057UL +-#define CKM_SP800_108_COUNTER_KDF 0x000003acUL +-#define CKM_SP800_108_FEEDBACK_KDF 0x000003adUL ++#define CKM_EDDSA 0x00001057UL ++ ++/* CKM_xxx_ENCRYPT_DATA mechanisms are new for v2.20 */ ++#define CKM_DES_ECB_ENCRYPT_DATA 0x00001100UL ++#define CKM_DES_CBC_ENCRYPT_DATA 0x00001101UL ++#define CKM_DES3_ECB_ENCRYPT_DATA 0x00001102UL ++#define CKM_DES3_CBC_ENCRYPT_DATA 0x00001103UL ++#define CKM_AES_ECB_ENCRYPT_DATA 0x00001104UL ++#define CKM_AES_CBC_ENCRYPT_DATA 0x00001105UL ++ ++#define CKM_GOSTR3410_KEY_PAIR_GEN 0x00001200UL ++#define CKM_GOSTR3410 0x00001201UL ++#define CKM_GOSTR3410_WITH_GOSTR3411 0x00001202UL ++#define CKM_GOSTR3410_KEY_WRAP 0x00001203UL ++#define CKM_GOSTR3410_DERIVE 0x00001204UL ++#define CKM_GOSTR3411 0x00001210UL ++#define CKM_GOSTR3411_HMAC 0x00001211UL ++#define CKM_GOST28147_KEY_GEN 0x00001220UL ++#define CKM_GOST28147_ECB 0x00001221UL ++#define CKM_GOST28147 0x00001222UL ++#define CKM_GOST28147_MAC 0x00001223UL ++#define CKM_GOST28147_KEY_WRAP 0x00001224UL ++ ++/* new for v2.40 */ ++#define CKM_CHACHA20_KEY_GEN 0x00001225UL ++#define CKM_CHACHA20 0x00001226UL ++#define CKM_POLY1305_KEY_GEN 0x00001227UL ++#define CKM_POLY1305 0x00001228UL ++ ++#define CKM_DSA_PARAMETER_GEN 0x00002000UL ++#define CKM_DH_PKCS_PARAMETER_GEN 0x00002001UL ++#define CKM_X9_42_DH_PARAMETER_GEN 0x00002002UL ++ ++/* new for v2.40 */ ++#define CKM_DSA_PROBABILISTIC_PARAMETER_GEN 0x00002003UL ++#define CKM_DSA_SHAWE_TAYLOR_PARAMETER_GEN 0x00002004UL ++#define CKM_DSA_FIPS_G_GEN 0x00002005UL ++#define CKM_AES_CFB1 0x00002108UL ++#define CKM_AES_KEY_WRAP 0x00002109UL ++#define CKM_AES_KEY_WRAP_PAD 0x0000210AUL ++#define CKM_AES_KEY_WRAP_KWP 0x0000210BUL ++ ++/* CKM_SP800_108_xxx_KDF are new for v3.0 */ ++#define CKM_SP800_108_COUNTER_KDF 0x000003acUL ++#define CKM_SP800_108_FEEDBACK_KDF 0x000003adUL + #define CKM_SP800_108_DOUBLE_PIPELINE_KDF 0x000003aeUL + +-#define CKM_VENDOR_DEFINED 0x80000000UL ++/* new for v2.4 */ ++#define CKM_RSA_PKCS_TPM_1_1 0x00004001UL ++#define CKM_RSA_PKCS_OAEP_TPM_1_1 0x00004002UL ++#define CKM_SHA_1_KEY_GEN 0x00004003UL ++#define CKM_SHA224_KEY_GEN 0x00004004UL ++#define CKM_SHA256_KEY_GEN 0x00004005UL ++#define CKM_SHA384_KEY_GEN 0x00004006UL ++#define CKM_SHA512_KEY_GEN 0x00004007UL ++#define CKM_SHA512_224_KEY_GEN 0x00004008UL ++#define CKM_SHA512_256_KEY_GEN 0x00004009UL ++#define CKM_SHA512_T_KEY_GEN 0x0000400aUL ++ ++/* new for v3.0 */ ++#define CKM_NULL 0x0000400bUL ++#define CKM_BLAKE2B_160 0x0000400cUL ++#define CKM_BLAKE2B_160_HMAC 0x0000400dUL ++#define CKM_BLAKE2B_160_HMAC_GENERAL 0x0000400eUL ++#define CKM_BLAKE2B_160_KEY_DERIVE 0x0000400fUL ++#define CKM_BLAKE2B_160_KEY_GEN 0x00004010UL ++#define CKM_BLAKE2B_256 0x00004011UL ++#define CKM_BLAKE2B_256_HMAC 0x00004012UL ++#define CKM_BLAKE2B_256_HMAC_GENERAL 0x00004013UL ++#define CKM_BLAKE2B_256_KEY_DERIVE 0x00004014UL ++#define CKM_BLAKE2B_256_KEY_GEN 0x00004015UL ++#define CKM_BLAKE2B_384 0x00004016UL ++#define CKM_BLAKE2B_384_HMAC 0x00004017UL ++#define CKM_BLAKE2B_384_HMAC_GENERAL 0x00004018UL ++#define CKM_BLAKE2B_384_KEY_DERIVE 0x00004019UL ++#define CKM_BLAKE2B_384_KEY_GEN 0x0000401aUL ++#define CKM_BLAKE2B_512 0x0000401bUL ++#define CKM_BLAKE2B_512_HMAC 0x0000401cUL ++#define CKM_BLAKE2B_512_HMAC_GENERAL 0x0000401dUL ++#define CKM_BLAKE2B_512_KEY_DERIVE 0x0000401eUL ++#define CKM_BLAKE2B_512_KEY_GEN 0x0000401fUL ++#define CKM_SALSA20 0x00004020UL ++#define CKM_CHACHA20_POLY1305 0x00004021UL ++#define CKM_SALSA20_POLY1305 0x00004022UL ++#define CKM_X3DH_INITIALIZE 0x00004023UL ++#define CKM_X3DH_RESPOND 0x00004024UL ++#define CKM_X2RATCHET_INITIALIZE 0x00004025UL ++#define CKM_X2RATCHET_RESPOND 0x00004026UL ++#define CKM_X2RATCHET_ENCRYPT 0x00004027UL ++#define CKM_X2RATCHET_DECRYPT 0x00004028UL ++#define CKM_XEDDSA 0x00004029UL ++#define CKM_HKDF_DERIVE 0x0000402aUL ++#define CKM_HKDF_DATA 0x0000402bUL ++#define CKM_HKDF_KEY_GEN 0x0000402cUL ++#define CKM_SALSA20_KEY_GEN 0x0000402dUL + +-typedef CK_MECHANISM_TYPE CK_PTR CK_MECHANISM_TYPE_PTR; ++#define CKM_VENDOR_DEFINED 0x80000000UL + ++typedef CK_MECHANISM_TYPE CK_PTR CK_MECHANISM_TYPE_PTR; + + /* CK_MECHANISM is a structure that specifies a particular +- * mechanism +- */ ++ * mechanism */ + typedef struct CK_MECHANISM { + CK_MECHANISM_TYPE mechanism; +- CK_VOID_PTR pParameter; +- CK_ULONG ulParameterLen; /* in bytes */ ++ CK_VOID_PTR pParameter; ++ ++ /* ulParameterLen was changed from CK_USHORT to CK_ULONG for ++ * v2.0 */ ++ CK_ULONG ulParameterLen; /* in bytes */ + } CK_MECHANISM; + + typedef CK_MECHANISM CK_PTR CK_MECHANISM_PTR; + +- + /* CK_MECHANISM_INFO provides information about a particular +- * mechanism +- */ ++ * mechanism */ + typedef struct CK_MECHANISM_INFO { + CK_ULONG ulMinKeySize; + CK_ULONG ulMaxKeySize; +@@ -1152,711 +1267,947 @@ typedef struct CK_MECHANISM_INFO { + } CK_MECHANISM_INFO; + + /* The flags are defined as follows: +- * Bit Flag Mask Meaning */ +-#define CKF_HW 0x00000001UL /* performed by HW */ +- +-/* Specify whether or not a mechanism can be used for a particular task */ +-#define CKF_MESSAGE_ENCRYPT 0x00000002UL +-#define CKF_MESSAGE_DECRYPT 0x00000004UL +-#define CKF_MESSAGE_SIGN 0x00000008UL +-#define CKF_MESSAGE_VERIFY 0x00000010UL +-#define CKF_MULTI_MESSAGE 0x00000020UL +-#define CKF_MULTI_MESSGE CKF_MULTI_MESSAGE +-#define CKF_FIND_OBJECTS 0x00000040UL +- +-#define CKF_ENCRYPT 0x00000100UL +-#define CKF_DECRYPT 0x00000200UL +-#define CKF_DIGEST 0x00000400UL +-#define CKF_SIGN 0x00000800UL +-#define CKF_SIGN_RECOVER 0x00001000UL +-#define CKF_VERIFY 0x00002000UL +-#define CKF_VERIFY_RECOVER 0x00004000UL +-#define CKF_GENERATE 0x00008000UL +-#define CKF_GENERATE_KEY_PAIR 0x00010000UL +-#define CKF_WRAP 0x00020000UL +-#define CKF_UNWRAP 0x00040000UL +-#define CKF_DERIVE 0x00080000UL ++ * Bit Flag Mask Meaning */ ++#define CKF_HW 0x00000001UL /* performed by HW */ + +-/* Describe a token's EC capabilities not available in mechanism +- * information. +- */ +-#define CKF_EC_F_P 0x00100000UL +-#define CKF_EC_F_2M 0x00200000UL +-#define CKF_EC_ECPARAMETERS 0x00400000UL +-#define CKF_EC_OID 0x00800000UL +-#define CKF_EC_NAMEDCURVE CKF_EC_OID /* deprecated since PKCS#11 3.00 */ +-#define CKF_EC_UNCOMPRESS 0x01000000UL +-#define CKF_EC_COMPRESS 0x02000000UL +-#define CKF_EC_CURVENAME 0x04000000UL ++/* Message interface Flags, new for v3.0 */ ++#define CKF_MESSAGE_ENCRYPT 0x00000002UL ++#define CKF_MESSAGE_DECRYPT 0x00000004UL ++#define CKF_MESSAGE_SIGN 0x00000008UL ++#define CKF_MESSAGE_VERIFY 0x00000010UL ++#define CKF_MULTI_MESSAGE 0x00000020UL ++ ++/* FindObjects (not for CK_MECHANISM_INFO, but for C_CancelSession) v3.0 */ ++#define CKF_FIND_OBJECTS 0x00000040UL ++ ++/* The flags CKF_ENCRYPT, CKF_DECRYPT, CKF_DIGEST, CKF_SIGN, ++ * CKG_SIGN_RECOVER, CKF_VERIFY, CKF_VERIFY_RECOVER, ++ * CKF_GENERATE, CKF_GENERATE_KEY_PAIR, CKF_WRAP, CKF_UNWRAP, ++ * and CKF_DERIVE are new for v2.0. They specify whether or not ++ * a mechanism can be used for a particular task */ ++#define CKF_ENCRYPT 0x00000100UL ++#define CKF_DECRYPT 0x00000200UL ++#define CKF_DIGEST 0x00000400UL ++#define CKF_SIGN 0x00000800UL ++#define CKF_SIGN_RECOVER 0x00001000UL ++#define CKF_VERIFY 0x00002000 ++#define CKF_VERIFY_RECOVER 0x00004000UL ++#define CKF_GENERATE 0x00008000UL ++#define CKF_GENERATE_KEY_PAIR 0x00010000UL ++#define CKF_WRAP 0x00020000UL ++#define CKF_UNWRAP 0x00040000UL ++#define CKF_DERIVE 0x00080000UL ++ ++/* CKF_EC_F_P, CKF_EC_F_2M, CKF_EC_ECPARAMETERS, CKF_EC_NAMEDCURVE, ++ * CKF_EC_UNCOMPRESS, and CKF_EC_COMPRESS are new for v2.11. They ++ * describe a token's EC capabilities not available in mechanism ++ * information. */ ++#define CKF_EC_F_P 0x00100000UL ++#define CKF_EC_F_2M 0x00200000UL ++#define CKF_EC_ECPARAMETERS 0x00400000UL ++#define CKF_EC_OID 0x00800000UL ++#define CKF_EC_NAMEDCURVE CKF_EC_OID /* renamed in v3.0 */ ++#define CKF_EC_UNCOMPRESS 0x01000000UL ++#define CKF_EC_COMPRESS 0x02000000UL + +-#define CKF_EXTENSION 0x80000000UL ++#define CKF_EXTENSION 0x80000000UL /* FALSE for this version */ + + typedef CK_MECHANISM_INFO CK_PTR CK_MECHANISM_INFO_PTR; + + /* CK_RV is a value that identifies the return value of a +- * Cryptoki function +- */ +-typedef CK_ULONG CK_RV; +- +-#define CKR_OK 0x00000000UL +-#define CKR_CANCEL 0x00000001UL +-#define CKR_HOST_MEMORY 0x00000002UL +-#define CKR_SLOT_ID_INVALID 0x00000003UL +- +-#define CKR_GENERAL_ERROR 0x00000005UL +-#define CKR_FUNCTION_FAILED 0x00000006UL +- +-#define CKR_ARGUMENTS_BAD 0x00000007UL +-#define CKR_NO_EVENT 0x00000008UL +-#define CKR_NEED_TO_CREATE_THREADS 0x00000009UL +-#define CKR_CANT_LOCK 0x0000000AUL +- +-#define CKR_ATTRIBUTE_READ_ONLY 0x00000010UL +-#define CKR_ATTRIBUTE_SENSITIVE 0x00000011UL +-#define CKR_ATTRIBUTE_TYPE_INVALID 0x00000012UL +-#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL +- +-#define CKR_ACTION_PROHIBITED 0x0000001BUL +- +-#define CKR_DATA_INVALID 0x00000020UL +-#define CKR_DATA_LEN_RANGE 0x00000021UL +-#define CKR_DEVICE_ERROR 0x00000030UL +-#define CKR_DEVICE_MEMORY 0x00000031UL +-#define CKR_DEVICE_REMOVED 0x00000032UL +-#define CKR_ENCRYPTED_DATA_INVALID 0x00000040UL +-#define CKR_ENCRYPTED_DATA_LEN_RANGE 0x00000041UL +-#define CKR_AEAD_DECRYPT_FAILED 0x00000042UL +-#define CKR_FUNCTION_CANCELED 0x00000050UL +-#define CKR_FUNCTION_NOT_PARALLEL 0x00000051UL +- +-#define CKR_FUNCTION_NOT_SUPPORTED 0x00000054UL +- +-#define CKR_KEY_HANDLE_INVALID 0x00000060UL +- +-#define CKR_KEY_SIZE_RANGE 0x00000062UL +-#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL +- +-#define CKR_KEY_NOT_NEEDED 0x00000064UL +-#define CKR_KEY_CHANGED 0x00000065UL +-#define CKR_KEY_NEEDED 0x00000066UL +-#define CKR_KEY_INDIGESTIBLE 0x00000067UL +-#define CKR_KEY_FUNCTION_NOT_PERMITTED 0x00000068UL +-#define CKR_KEY_NOT_WRAPPABLE 0x00000069UL +-#define CKR_KEY_UNEXTRACTABLE 0x0000006AUL +- +-#define CKR_MECHANISM_INVALID 0x00000070UL +-#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL +- +-#define CKR_OBJECT_HANDLE_INVALID 0x00000082UL +-#define CKR_OPERATION_ACTIVE 0x00000090UL +-#define CKR_OPERATION_NOT_INITIALIZED 0x00000091UL +-#define CKR_PIN_INCORRECT 0x000000A0UL +-#define CKR_PIN_INVALID 0x000000A1UL +-#define CKR_PIN_LEN_RANGE 0x000000A2UL +- +-#define CKR_PIN_EXPIRED 0x000000A3UL +-#define CKR_PIN_LOCKED 0x000000A4UL +- +-#define CKR_SESSION_CLOSED 0x000000B0UL +-#define CKR_SESSION_COUNT 0x000000B1UL +-#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL +-#define CKR_SESSION_PARALLEL_NOT_SUPPORTED 0x000000B4UL +-#define CKR_SESSION_READ_ONLY 0x000000B5UL +-#define CKR_SESSION_EXISTS 0x000000B6UL +- +-#define CKR_SESSION_READ_ONLY_EXISTS 0x000000B7UL +-#define CKR_SESSION_READ_WRITE_SO_EXISTS 0x000000B8UL +- +-#define CKR_SIGNATURE_INVALID 0x000000C0UL +-#define CKR_SIGNATURE_LEN_RANGE 0x000000C1UL +-#define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL +-#define CKR_TEMPLATE_INCONSISTENT 0x000000D1UL +-#define CKR_TOKEN_NOT_PRESENT 0x000000E0UL +-#define CKR_TOKEN_NOT_RECOGNIZED 0x000000E1UL +-#define CKR_TOKEN_WRITE_PROTECTED 0x000000E2UL +-#define CKR_UNWRAPPING_KEY_HANDLE_INVALID 0x000000F0UL +-#define CKR_UNWRAPPING_KEY_SIZE_RANGE 0x000000F1UL +-#define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT 0x000000F2UL +-#define CKR_USER_ALREADY_LOGGED_IN 0x00000100UL +-#define CKR_USER_NOT_LOGGED_IN 0x00000101UL +-#define CKR_USER_PIN_NOT_INITIALIZED 0x00000102UL +-#define CKR_USER_TYPE_INVALID 0x00000103UL +- +-#define CKR_USER_ANOTHER_ALREADY_LOGGED_IN 0x00000104UL +-#define CKR_USER_TOO_MANY_TYPES 0x00000105UL +- +-#define CKR_WRAPPED_KEY_INVALID 0x00000110UL +-#define CKR_WRAPPED_KEY_LEN_RANGE 0x00000112UL +-#define CKR_WRAPPING_KEY_HANDLE_INVALID 0x00000113UL +-#define CKR_WRAPPING_KEY_SIZE_RANGE 0x00000114UL +-#define CKR_WRAPPING_KEY_TYPE_INCONSISTENT 0x00000115UL +-#define CKR_RANDOM_SEED_NOT_SUPPORTED 0x00000120UL +- +-#define CKR_RANDOM_NO_RNG 0x00000121UL +- +-#define CKR_DOMAIN_PARAMS_INVALID 0x00000130UL +- +-#define CKR_CURVE_NOT_SUPPORTED 0x00000140UL +- +-#define CKR_BUFFER_TOO_SMALL 0x00000150UL +-#define CKR_SAVED_STATE_INVALID 0x00000160UL +-#define CKR_INFORMATION_SENSITIVE 0x00000170UL +-#define CKR_STATE_UNSAVEABLE 0x00000180UL +- +-#define CKR_CRYPTOKI_NOT_INITIALIZED 0x00000190UL +-#define CKR_CRYPTOKI_ALREADY_INITIALIZED 0x00000191UL +-#define CKR_MUTEX_BAD 0x000001A0UL +-#define CKR_MUTEX_NOT_LOCKED 0x000001A1UL +- +-#define CKR_NEW_PIN_MODE 0x000001B0UL +-#define CKR_NEXT_OTP 0x000001B1UL +- +-#define CKR_EXCEEDED_MAX_ITERATIONS 0x000001B5UL +-#define CKR_FIPS_SELF_TEST_FAILED 0x000001B6UL +-#define CKR_LIBRARY_LOAD_FAILED 0x000001B7UL +-#define CKR_PIN_TOO_WEAK 0x000001B8UL +-#define CKR_PUBLIC_KEY_INVALID 0x000001B9UL +- +-#define CKR_FUNCTION_REJECTED 0x00000200UL +-#define CKR_TOKEN_RESOURCE_EXCEEDED 0x00000201UL +-#define CKR_OPERATION_CANCEL_FAILED 0x00000202UL +- +-#define CKR_VENDOR_DEFINED 0x80000000UL ++ * PKCS #11 function */ ++/* CK_RV was changed from CK_USHORT to CK_ULONG for v2.0 */ ++typedef CK_ULONG CK_RV; ++ ++#define CKR_OK 0x00000000UL ++#define CKR_CANCEL 0x00000001UL ++#define CKR_HOST_MEMORY 0x00000002UL ++#define CKR_SLOT_ID_INVALID 0x00000003UL ++ ++/* CKR_FLAGS_INVALID was removed for v2.0 */ ++ ++/* CKR_GENERAL_ERROR and CKR_FUNCTION_FAILED are new for v2.0 */ ++#define CKR_GENERAL_ERROR 0x00000005UL ++#define CKR_FUNCTION_FAILED 0x00000006UL ++ ++/* CKR_ARGUMENTS_BAD, CKR_NO_EVENT, CKR_NEED_TO_CREATE_THREADS, ++ * and CKR_CANT_LOCK are new for v2.01 */ ++#define CKR_ARGUMENTS_BAD 0x00000007UL ++#define CKR_NO_EVENT 0x00000008UL ++#define CKR_NEED_TO_CREATE_THREADS 0x00000009UL ++#define CKR_CANT_LOCK 0x0000000AUL ++ ++#define CKR_ATTRIBUTE_READ_ONLY 0x00000010UL ++#define CKR_ATTRIBUTE_SENSITIVE 0x00000011UL ++#define CKR_ATTRIBUTE_TYPE_INVALID 0x00000012UL ++#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL ++ ++/* new for v3.0 */ ++#define CKR_ACTION_PROHIBITED 0x0000001BUL ++ ++#define CKR_DATA_INVALID 0x00000020UL ++#define CKR_DATA_LEN_RANGE 0x00000021UL ++#define CKR_DEVICE_ERROR 0x00000030UL ++#define CKR_DEVICE_MEMORY 0x00000031UL ++#define CKR_DEVICE_REMOVED 0x00000032UL ++#define CKR_ENCRYPTED_DATA_INVALID 0x00000040UL ++#define CKR_ENCRYPTED_DATA_LEN_RANGE 0x00000041UL ++#define CKR_FUNCTION_CANCELED 0x00000050UL ++#define CKR_FUNCTION_NOT_PARALLEL 0x00000051UL ++ ++/* CKR_FUNCTION_NOT_SUPPORTED is new for v2.0 */ ++#define CKR_FUNCTION_NOT_SUPPORTED 0x00000054UL ++ ++#define CKR_KEY_HANDLE_INVALID 0x00000060UL ++ ++/* CKR_KEY_SENSITIVE was removed for v2.0 */ ++ ++#define CKR_KEY_SIZE_RANGE 0x00000062UL ++#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL ++ ++/* CKR_KEY_NOT_NEEDED, CKR_KEY_CHANGED, CKR_KEY_NEEDED, ++ * CKR_KEY_INDIGESTIBLE, CKR_KEY_FUNCTION_NOT_PERMITTED, ++ * CKR_KEY_NOT_WRAPPABLE, and CKR_KEY_UNEXTRACTABLE are new for ++ * v2.0 */ ++#define CKR_KEY_NOT_NEEDED 0x00000064UL ++#define CKR_KEY_CHANGED 0x00000065UL ++#define CKR_KEY_NEEDED 0x00000066UL ++#define CKR_KEY_INDIGESTIBLE 0x00000067UL ++#define CKR_KEY_FUNCTION_NOT_PERMITTED 0x00000068UL ++#define CKR_KEY_NOT_WRAPPABLE 0x00000069UL ++#define CKR_KEY_UNEXTRACTABLE 0x0000006AUL ++ ++#define CKR_MECHANISM_INVALID 0x00000070UL ++#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL ++ ++/* CKR_OBJECT_CLASS_INCONSISTENT and CKR_OBJECT_CLASS_INVALID ++ * were removed for v2.0 */ ++#define CKR_OBJECT_HANDLE_INVALID 0x00000082UL ++#define CKR_OPERATION_ACTIVE 0x00000090UL ++#define CKR_OPERATION_NOT_INITIALIZED 0x00000091UL ++#define CKR_PIN_INCORRECT 0x000000A0UL ++#define CKR_PIN_INVALID 0x000000A1UL ++#define CKR_PIN_LEN_RANGE 0x000000A2UL ++ ++/* CKR_PIN_EXPIRED and CKR_PIN_LOCKED are new for v2.0 */ ++#define CKR_PIN_EXPIRED 0x000000A3UL ++#define CKR_PIN_LOCKED 0x000000A4UL ++ ++#define CKR_SESSION_CLOSED 0x000000B0UL ++#define CKR_SESSION_COUNT 0x000000B1UL ++#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL ++#define CKR_SESSION_PARALLEL_NOT_SUPPORTED 0x000000B4UL ++#define CKR_SESSION_READ_ONLY 0x000000B5UL ++#define CKR_SESSION_EXISTS 0x000000B6UL ++ ++/* CKR_SESSION_READ_ONLY_EXISTS and ++ * CKR_SESSION_READ_WRITE_SO_EXISTS are new for v2.0 */ ++#define CKR_SESSION_READ_ONLY_EXISTS 0x000000B7UL ++#define CKR_SESSION_READ_WRITE_SO_EXISTS 0x000000B8UL ++ ++#define CKR_SIGNATURE_INVALID 0x000000C0UL ++#define CKR_SIGNATURE_LEN_RANGE 0x000000C1UL ++#define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL ++#define CKR_TEMPLATE_INCONSISTENT 0x000000D1UL ++#define CKR_TOKEN_NOT_PRESENT 0x000000E0UL ++#define CKR_TOKEN_NOT_RECOGNIZED 0x000000E1UL ++#define CKR_TOKEN_WRITE_PROTECTED 0x000000E2UL ++#define CKR_UNWRAPPING_KEY_HANDLE_INVALID 0x000000F0UL ++#define CKR_UNWRAPPING_KEY_SIZE_RANGE 0x000000F1UL ++#define CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT 0x000000F2UL ++#define CKR_USER_ALREADY_LOGGED_IN 0x00000100UL ++#define CKR_USER_NOT_LOGGED_IN 0x00000101UL ++#define CKR_USER_PIN_NOT_INITIALIZED 0x00000102UL ++#define CKR_USER_TYPE_INVALID 0x00000103UL ++ ++/* CKR_USER_ANOTHER_ALREADY_LOGGED_IN and CKR_USER_TOO_MANY_TYPES ++ * are new to v2.01 */ ++#define CKR_USER_ANOTHER_ALREADY_LOGGED_IN 0x00000104UL ++#define CKR_USER_TOO_MANY_TYPES 0x00000105UL ++ ++#define CKR_WRAPPED_KEY_INVALID 0x00000110UL ++#define CKR_WRAPPED_KEY_LEN_RANGE 0x00000112UL ++#define CKR_WRAPPING_KEY_HANDLE_INVALID 0x00000113UL ++#define CKR_WRAPPING_KEY_SIZE_RANGE 0x00000114UL ++#define CKR_WRAPPING_KEY_TYPE_INCONSISTENT 0x00000115UL ++#define CKR_RANDOM_SEED_NOT_SUPPORTED 0x00000120UL ++ ++/* This is new to v2.0 */ ++#define CKR_RANDOM_NO_RNG 0x00000121UL ++ ++/* This is new to v2.11 */ ++#define CKR_DOMAIN_PARAMS_INVALID 0x00000130UL ++ ++/* This is new to v2.40 */ ++#define CKR_CURVE_NOT_SUPPORTED 0x00000140UL ++ ++/* These are new to v2.0 */ ++#define CKR_BUFFER_TOO_SMALL 0x00000150UL ++#define CKR_SAVED_STATE_INVALID 0x00000160UL ++#define CKR_INFORMATION_SENSITIVE 0x00000170UL ++#define CKR_STATE_UNSAVEABLE 0x00000180UL ++ ++/* These are new to v2.01 */ ++#define CKR_CRYPTOKI_NOT_INITIALIZED 0x00000190UL ++#define CKR_CRYPTOKI_ALREADY_INITIALIZED 0x00000191UL ++#define CKR_MUTEX_BAD 0x000001A0UL ++#define CKR_MUTEX_NOT_LOCKED 0x000001A1UL ++ ++/* These are new to v2.40 */ ++#define CKR_NEW_PIN_MODE 0x000001B0UL ++#define CKR_NEXT_OTP 0x000001B1UL ++#define CKR_EXCEEDED_MAX_ITERATIONS 0x000001B5UL ++#define CKR_FIPS_SELF_TEST_FAILED 0x000001B6UL ++#define CKR_LIBRARY_LOAD_FAILED 0x000001B7UL ++#define CKR_PIN_TOO_WEAK 0x000001B8UL ++#define CKR_PUBLIC_KEY_INVALID 0x000001B9UL ++ ++/* This is new to v2.20 */ ++#define CKR_FUNCTION_REJECTED 0x00000200UL ++ ++/* This is new to v3.0 */ ++#define CKR_TOKEN_RESOURCE_EXCEEDED 0x00000201UL ++#define CKR_OPERATION_CANCEL_FAILED 0x00000202UL + ++#define CKR_VENDOR_DEFINED 0x80000000UL + + /* CK_NOTIFY is an application callback that processes events */ + typedef CK_CALLBACK_FUNCTION(CK_RV, CK_NOTIFY)( +- CK_SESSION_HANDLE hSession, /* the session's handle */ +- CK_NOTIFICATION event, +- CK_VOID_PTR pApplication /* passed to C_OpenSession */ +-); ++ CK_SESSION_HANDLE hSession, /* the session's handle */ ++ CK_NOTIFICATION event, ++ CK_VOID_PTR pApplication /* passed to C_OpenSession */ ++ ); + +- +-/* CK_FUNCTION_LIST is a structure holding a Cryptoki spec ++/* CK_FUNCTION_LIST is a structure holding a PKCS #11 spec + * version and pointers of appropriate types to all the +- * Cryptoki functions +- */ ++ * PKCS #11 functions */ ++/* CK_FUNCTION_LIST is new for v2.0 */ + typedef struct CK_FUNCTION_LIST CK_FUNCTION_LIST; +-typedef struct CK_FUNCTION_LIST_3_0 CK_FUNCTION_LIST_3_0; + + typedef CK_FUNCTION_LIST CK_PTR CK_FUNCTION_LIST_PTR; +-typedef CK_FUNCTION_LIST_3_0 CK_PTR CK_FUNCTION_LIST_3_0_PTR; + + typedef CK_FUNCTION_LIST_PTR CK_PTR CK_FUNCTION_LIST_PTR_PTR; ++ ++/* These are new for v3.0 */ ++typedef struct CK_FUNCTION_LIST_3_0 CK_FUNCTION_LIST_3_0; ++typedef CK_FUNCTION_LIST_3_0 CK_PTR CK_FUNCTION_LIST_3_0_PTR; + typedef CK_FUNCTION_LIST_3_0_PTR CK_PTR CK_FUNCTION_LIST_3_0_PTR_PTR; + ++/* Interfaces are new in v3.0 */ + typedef struct CK_INTERFACE { +- CK_CHAR *pInterfaceName; ++ CK_CHAR *pInterfaceName; + CK_VOID_PTR pFunctionList; +- CK_FLAGS flags; ++ CK_FLAGS flags; + } CK_INTERFACE; + + typedef CK_INTERFACE CK_PTR CK_INTERFACE_PTR; + typedef CK_INTERFACE_PTR CK_PTR CK_INTERFACE_PTR_PTR; + +-#define CKF_END_OF_MESSAGE 0x00000001UL +- ++#define CKF_END_OF_MESSAGE 0x00000001UL ++#define CKF_INTERFACE_FORK_SAFE 0x00000001UL + + /* CK_CREATEMUTEX is an application callback for creating a +- * mutex object +- */ ++ * mutex object */ + typedef CK_CALLBACK_FUNCTION(CK_RV, CK_CREATEMUTEX)( +- CK_VOID_PTR_PTR ppMutex /* location to receive ptr to mutex */ +-); +- ++ CK_VOID_PTR_PTR ppMutex /* location to receive ptr to mutex */ ++ ); + + /* CK_DESTROYMUTEX is an application callback for destroying a +- * mutex object +- */ ++ * mutex object */ + typedef CK_CALLBACK_FUNCTION(CK_RV, CK_DESTROYMUTEX)( +- CK_VOID_PTR pMutex /* pointer to mutex */ +-); +- ++ CK_VOID_PTR pMutex /* pointer to mutex */ ++ ); + + /* CK_LOCKMUTEX is an application callback for locking a mutex */ + typedef CK_CALLBACK_FUNCTION(CK_RV, CK_LOCKMUTEX)( +- CK_VOID_PTR pMutex /* pointer to mutex */ +-); +- ++ CK_VOID_PTR pMutex /* pointer to mutex */ ++ ); + + /* CK_UNLOCKMUTEX is an application callback for unlocking a +- * mutex +- */ ++ * mutex */ + typedef CK_CALLBACK_FUNCTION(CK_RV, CK_UNLOCKMUTEX)( +- CK_VOID_PTR pMutex /* pointer to mutex */ +-); +- +-/* Get functionlist flags */ +-#define CKF_INTERFACE_FORK_SAFE 0x00000001UL ++ CK_VOID_PTR pMutex /* pointer to mutex */ ++ ); + + /* CK_C_INITIALIZE_ARGS provides the optional arguments to +- * C_Initialize +- */ ++ * C_Initialize */ + typedef struct CK_C_INITIALIZE_ARGS { +- CK_CREATEMUTEX CreateMutex; ++ CK_CREATEMUTEX CreateMutex; + CK_DESTROYMUTEX DestroyMutex; +- CK_LOCKMUTEX LockMutex; +- CK_UNLOCKMUTEX UnlockMutex; +- CK_FLAGS flags; +- CK_VOID_PTR pReserved; ++ CK_LOCKMUTEX LockMutex; ++ CK_UNLOCKMUTEX UnlockMutex; ++ CK_FLAGS flags; ++ /* The official PKCS #11 spec does not have a 'LibraryParameters' field, but ++ * a reserved field. NSS needs a way to pass instance-specific information ++ * to the library (like where to find its config files, etc). This ++ * information is usually provided by the installer and passed uninterpreted ++ * by NSS to the library, though NSS does know the specifics of the softoken ++ * version of this parameter. Most compliant PKCS#11 modules expect this ++ * parameter to be NULL, and will return CKR_ARGUMENTS_BAD from ++ * C_Initialize if Library parameters is supplied. */ ++ CK_CHAR_PTR *LibraryParameters; ++ /* This field is only present if the LibraryParameters is not NULL. It must ++ * be NULL in all cases */ ++ CK_VOID_PTR pReserved; + } CK_C_INITIALIZE_ARGS; + + /* flags: bit flags that provide capabilities of the slot + * Bit Flag Mask Meaning + */ + #define CKF_LIBRARY_CANT_CREATE_OS_THREADS 0x00000001UL +-#define CKF_OS_LOCKING_OK 0x00000002UL ++#define CKF_OS_LOCKING_OK 0x00000002UL + + typedef CK_C_INITIALIZE_ARGS CK_PTR CK_C_INITIALIZE_ARGS_PTR; + +- +- + /* additional flags for parameters to functions */ + + /* CKF_DONT_BLOCK is for the function C_WaitForSlotEvent */ +-#define CKF_DONT_BLOCK 1 ++#define CKF_DONT_BLOCK 1 + +-/* CK_RSA_PKCS_MGF_TYPE is used to indicate the Message ++/* CK_RSA_PKCS_OAEP_MGF_TYPE is new for v2.10. ++ * CK_RSA_PKCS_OAEP_MGF_TYPE is used to indicate the Message + * Generation Function (MGF) applied to a message block when + * formatting a message block for the PKCS #1 OAEP encryption +- * scheme. +- */ ++ * scheme. */ + typedef CK_ULONG CK_RSA_PKCS_MGF_TYPE; + + typedef CK_RSA_PKCS_MGF_TYPE CK_PTR CK_RSA_PKCS_MGF_TYPE_PTR; + + /* The following MGFs are defined */ +-#define CKG_MGF1_SHA1 0x00000001UL +-#define CKG_MGF1_SHA256 0x00000002UL +-#define CKG_MGF1_SHA384 0x00000003UL +-#define CKG_MGF1_SHA512 0x00000004UL +-#define CKG_MGF1_SHA224 0x00000005UL +-#define CKG_MGF1_SHA3_224 0x00000006UL +-#define CKG_MGF1_SHA3_256 0x00000007UL +-#define CKG_MGF1_SHA3_384 0x00000008UL +-#define CKG_MGF1_SHA3_512 0x00000009UL ++/* CKG_MGF1_SHA256, CKG_MGF1_SHA384, and CKG_MGF1_SHA512 ++ * are new for v2.20 */ ++#define CKG_MGF1_SHA1 0x00000001UL ++#define CKG_MGF1_SHA256 0x00000002UL ++#define CKG_MGF1_SHA384 0x00000003UL ++#define CKG_MGF1_SHA512 0x00000004UL ++ ++/* v2.20 amendment 3 */ ++#define CKG_MGF1_SHA224 0x00000005UL ++ ++/* v2.40 */ ++#define CKG_MGF1_SHA3_224 0x00000006UL ++#define CKG_MGF1_SHA3_256 0x00000007UL ++#define CKG_MGF1_SHA3_384 0x00000008UL ++#define CKG_MGF1_SHA3_512 0x00000009UL + +-/* CK_RSA_PKCS_OAEP_SOURCE_TYPE is used to indicate the source ++/* CK_RSA_PKCS_OAEP_SOURCE_TYPE is new for v2.10. ++ * CK_RSA_PKCS_OAEP_SOURCE_TYPE is used to indicate the source + * of the encoding parameter when formatting a message block +- * for the PKCS #1 OAEP encryption scheme. +- */ ++ * for the PKCS #1 OAEP encryption scheme. */ + typedef CK_ULONG CK_RSA_PKCS_OAEP_SOURCE_TYPE; + + typedef CK_RSA_PKCS_OAEP_SOURCE_TYPE CK_PTR CK_RSA_PKCS_OAEP_SOURCE_TYPE_PTR; + + /* The following encoding parameter sources are defined */ +-#define CKZ_DATA_SPECIFIED 0x00000001UL ++#define CKZ_DATA_SPECIFIED 0x00000001UL + +-/* CK_RSA_PKCS_OAEP_PARAMS provides the parameters to the +- * CKM_RSA_PKCS_OAEP mechanism. +- */ ++/* CK_RSA_PKCS_OAEP_PARAMS is new for v2.10. ++ * CK_RSA_PKCS_OAEP_PARAMS provides the parameters to the ++ * CKM_RSA_PKCS_OAEP mechanism. */ + typedef struct CK_RSA_PKCS_OAEP_PARAMS { +- CK_MECHANISM_TYPE hashAlg; +- CK_RSA_PKCS_MGF_TYPE mgf; ++ CK_MECHANISM_TYPE hashAlg; ++ CK_RSA_PKCS_MGF_TYPE mgf; + CK_RSA_PKCS_OAEP_SOURCE_TYPE source; +- CK_VOID_PTR pSourceData; +- CK_ULONG ulSourceDataLen; ++ CK_VOID_PTR pSourceData; ++ CK_ULONG ulSourceDataLen; + } CK_RSA_PKCS_OAEP_PARAMS; + + typedef CK_RSA_PKCS_OAEP_PARAMS CK_PTR CK_RSA_PKCS_OAEP_PARAMS_PTR; + +-/* CK_RSA_PKCS_PSS_PARAMS provides the parameters to the +- * CKM_RSA_PKCS_PSS mechanism(s). +- */ ++/* CK_RSA_PKCS_PSS_PARAMS is new for v2.11. ++ * CK_RSA_PKCS_PSS_PARAMS provides the parameters to the ++ * CKM_RSA_PKCS_PSS mechanism(s). */ + typedef struct CK_RSA_PKCS_PSS_PARAMS { +- CK_MECHANISM_TYPE hashAlg; ++ CK_MECHANISM_TYPE hashAlg; + CK_RSA_PKCS_MGF_TYPE mgf; +- CK_ULONG sLen; ++ CK_ULONG sLen; + } CK_RSA_PKCS_PSS_PARAMS; + + typedef CK_RSA_PKCS_PSS_PARAMS CK_PTR CK_RSA_PKCS_PSS_PARAMS_PTR; + ++/* CK_EC_KDF_TYPE is new for v2.11. */ + typedef CK_ULONG CK_EC_KDF_TYPE; +-typedef CK_EC_KDF_TYPE CK_PTR CK_EC_KDF_TYPE_PTR; + + /* The following EC Key Derivation Functions are defined */ +-#define CKD_NULL 0x00000001UL +-#define CKD_SHA1_KDF 0x00000002UL +- +-/* The following X9.42 DH key derivation functions are defined */ +-#define CKD_SHA1_KDF_ASN1 0x00000003UL +-#define CKD_SHA1_KDF_CONCATENATE 0x00000004UL +-#define CKD_SHA224_KDF 0x00000005UL +-#define CKD_SHA256_KDF 0x00000006UL +-#define CKD_SHA384_KDF 0x00000007UL +-#define CKD_SHA512_KDF 0x00000008UL +-#define CKD_CPDIVERSIFY_KDF 0x00000009UL +-#define CKD_SHA3_224_KDF 0x0000000AUL +-#define CKD_SHA3_256_KDF 0x0000000BUL +-#define CKD_SHA3_384_KDF 0x0000000CUL +-#define CKD_SHA3_512_KDF 0x0000000DUL +-#define CKD_SHA1_KDF_SP800 0x0000000EUL +-#define CKD_SHA224_KDF_SP800 0x0000000FUL +-#define CKD_SHA256_KDF_SP800 0x00000010UL +-#define CKD_SHA384_KDF_SP800 0x00000011UL +-#define CKD_SHA512_KDF_SP800 0x00000012UL +-#define CKD_SHA3_224_KDF_SP800 0x00000013UL +-#define CKD_SHA3_256_KDF_SP800 0x00000014UL +-#define CKD_SHA3_384_KDF_SP800 0x00000015UL +-#define CKD_SHA3_512_KDF_SP800 0x00000016UL +-#define CKD_BLAKE2B_160_KDF 0x00000017UL +-#define CKD_BLAKE2B_256_KDF 0x00000018UL +-#define CKD_BLAKE2B_384_KDF 0x00000019UL +-#define CKD_BLAKE2B_512_KDF 0x0000001aUL ++#define CKD_NULL 0x00000001UL ++#define CKD_SHA1_KDF 0x00000002UL ++#define CKD_SHA224_KDF 0x00000005UL ++#define CKD_SHA256_KDF 0x00000006UL ++#define CKD_SHA384_KDF 0x00000007UL ++#define CKD_SHA512_KDF 0x00000008UL ++ ++/* new for v2.40 */ ++#define CKD_CPDIVERSIFY_KDF 0x00000009UL ++#define CKD_SHA3_224_KDF 0x0000000AUL ++#define CKD_SHA3_256_KDF 0x0000000BUL ++#define CKD_SHA3_384_KDF 0x0000000CUL ++#define CKD_SHA3_512_KDF 0x0000000DUL ++ ++/* new for v3.0 */ ++#define CKD_SHA1_KDF_SP800 0x0000000EUL ++#define CKD_SHA224_KDF_SP800 0x0000000FUL ++#define CKD_SHA256_KDF_SP800 0x00000010UL ++#define CKD_SHA384_KDF_SP800 0x00000011UL ++#define CKD_SHA512_KDF_SP800 0x00000012UL ++#define CKD_SHA3_224_KDF_SP800 0x00000013UL ++#define CKD_SHA3_256_KDF_SP800 0x00000014UL ++#define CKD_SHA3_384_KDF_SP800 0x00000015UL ++#define CKD_SHA3_512_KDF_SP800 0x00000016UL ++#define CKD_BLAKE2B_160_KDF 0x00000017UL ++#define CKD_BLAKE2B_256_KDF 0x00000018UL ++#define CKD_BLAKE2B_384_KDF 0x00000019UL ++#define CKD_BLAKE2B_512_KDF 0x0000001aUL + +-/* CK_ECDH1_DERIVE_PARAMS provides the parameters to the ++/* CK_ECDH1_DERIVE_PARAMS is new for v2.11. ++ * CK_ECDH1_DERIVE_PARAMS provides the parameters to the + * CKM_ECDH1_DERIVE and CKM_ECDH1_COFACTOR_DERIVE mechanisms, + * where each party contributes one key pair. + */ + typedef struct CK_ECDH1_DERIVE_PARAMS { + CK_EC_KDF_TYPE kdf; +- CK_ULONG ulSharedDataLen; +- CK_BYTE_PTR pSharedData; +- CK_ULONG ulPublicDataLen; +- CK_BYTE_PTR pPublicData; ++ CK_ULONG ulSharedDataLen; ++ CK_BYTE_PTR pSharedData; ++ CK_ULONG ulPublicDataLen; ++ CK_BYTE_PTR pPublicData; + } CK_ECDH1_DERIVE_PARAMS; + + typedef CK_ECDH1_DERIVE_PARAMS CK_PTR CK_ECDH1_DERIVE_PARAMS_PTR; + +-/* ++/* CK_ECDH2_DERIVE_PARAMS is new for v2.11. + * CK_ECDH2_DERIVE_PARAMS provides the parameters to the +- * CKM_ECMQV_DERIVE mechanism, where each party contributes two key pairs. +- */ ++ * CKM_ECMQV_DERIVE mechanism, where each party contributes two key pairs. */ + typedef struct CK_ECDH2_DERIVE_PARAMS { +- CK_EC_KDF_TYPE kdf; +- CK_ULONG ulSharedDataLen; +- CK_BYTE_PTR pSharedData; +- CK_ULONG ulPublicDataLen; +- CK_BYTE_PTR pPublicData; +- CK_ULONG ulPrivateDataLen; ++ CK_EC_KDF_TYPE kdf; ++ CK_ULONG ulSharedDataLen; ++ CK_BYTE_PTR pSharedData; ++ CK_ULONG ulPublicDataLen; ++ CK_BYTE_PTR pPublicData; ++ CK_ULONG ulPrivateDataLen; + CK_OBJECT_HANDLE hPrivateData; +- CK_ULONG ulPublicDataLen2; +- CK_BYTE_PTR pPublicData2; ++ CK_ULONG ulPublicDataLen2; ++ CK_BYTE_PTR pPublicData2; + } CK_ECDH2_DERIVE_PARAMS; + + typedef CK_ECDH2_DERIVE_PARAMS CK_PTR CK_ECDH2_DERIVE_PARAMS_PTR; + + typedef struct CK_ECMQV_DERIVE_PARAMS { +- CK_EC_KDF_TYPE kdf; +- CK_ULONG ulSharedDataLen; +- CK_BYTE_PTR pSharedData; +- CK_ULONG ulPublicDataLen; +- CK_BYTE_PTR pPublicData; +- CK_ULONG ulPrivateDataLen; ++ CK_EC_KDF_TYPE kdf; ++ CK_ULONG ulSharedDataLen; ++ CK_BYTE_PTR pSharedData; ++ CK_ULONG ulPublicDataLen; ++ CK_BYTE_PTR pPublicData; ++ CK_ULONG ulPrivateDataLen; + CK_OBJECT_HANDLE hPrivateData; +- CK_ULONG ulPublicDataLen2; +- CK_BYTE_PTR pPublicData2; ++ CK_ULONG ulPublicDataLen2; ++ CK_BYTE_PTR pPublicData2; + CK_OBJECT_HANDLE publicKey; + } CK_ECMQV_DERIVE_PARAMS; + + typedef CK_ECMQV_DERIVE_PARAMS CK_PTR CK_ECMQV_DERIVE_PARAMS_PTR; + + /* Typedefs and defines for the CKM_X9_42_DH_KEY_PAIR_GEN and the +- * CKM_X9_42_DH_PARAMETER_GEN mechanisms +- */ ++ * CKM_X9_42_DH_PARAMETER_GEN mechanisms (new for PKCS #11 v2.11) */ + typedef CK_ULONG CK_X9_42_DH_KDF_TYPE; + typedef CK_X9_42_DH_KDF_TYPE CK_PTR CK_X9_42_DH_KDF_TYPE_PTR; + +-/* CK_X9_42_DH1_DERIVE_PARAMS provides the parameters to the ++/* The following X9.42 DH key derivation functions are defined ++ (besides CKD_NULL already defined : */ ++#define CKD_SHA1_KDF_ASN1 0x00000003UL ++#define CKD_SHA1_KDF_CONCATENATE 0x00000004UL ++ ++/* CK_X9_42_DH1_DERIVE_PARAMS is new for v2.11. ++ * CK_X9_42_DH1_DERIVE_PARAMS provides the parameters to the + * CKM_X9_42_DH_DERIVE key derivation mechanism, where each party +- * contributes one key pair +- */ ++ * contributes one key pair */ + typedef struct CK_X9_42_DH1_DERIVE_PARAMS { + CK_X9_42_DH_KDF_TYPE kdf; +- CK_ULONG ulOtherInfoLen; +- CK_BYTE_PTR pOtherInfo; +- CK_ULONG ulPublicDataLen; +- CK_BYTE_PTR pPublicData; ++ CK_ULONG ulOtherInfoLen; ++ CK_BYTE_PTR pOtherInfo; ++ CK_ULONG ulPublicDataLen; ++ CK_BYTE_PTR pPublicData; + } CK_X9_42_DH1_DERIVE_PARAMS; + + typedef struct CK_X9_42_DH1_DERIVE_PARAMS CK_PTR CK_X9_42_DH1_DERIVE_PARAMS_PTR; + +-/* CK_X9_42_DH2_DERIVE_PARAMS provides the parameters to the ++/* CK_X9_42_DH2_DERIVE_PARAMS is new for v2.11. ++ * CK_X9_42_DH2_DERIVE_PARAMS provides the parameters to the + * CKM_X9_42_DH_HYBRID_DERIVE and CKM_X9_42_MQV_DERIVE key derivation +- * mechanisms, where each party contributes two key pairs +- */ ++ * mechanisms, where each party contributes two key pairs */ + typedef struct CK_X9_42_DH2_DERIVE_PARAMS { + CK_X9_42_DH_KDF_TYPE kdf; +- CK_ULONG ulOtherInfoLen; +- CK_BYTE_PTR pOtherInfo; +- CK_ULONG ulPublicDataLen; +- CK_BYTE_PTR pPublicData; +- CK_ULONG ulPrivateDataLen; +- CK_OBJECT_HANDLE hPrivateData; +- CK_ULONG ulPublicDataLen2; +- CK_BYTE_PTR pPublicData2; ++ CK_ULONG ulOtherInfoLen; ++ CK_BYTE_PTR pOtherInfo; ++ CK_ULONG ulPublicDataLen; ++ CK_BYTE_PTR pPublicData; ++ CK_ULONG ulPrivateDataLen; ++ CK_OBJECT_HANDLE hPrivateData; ++ CK_ULONG ulPublicDataLen2; ++ CK_BYTE_PTR pPublicData2; + } CK_X9_42_DH2_DERIVE_PARAMS; + + typedef CK_X9_42_DH2_DERIVE_PARAMS CK_PTR CK_X9_42_DH2_DERIVE_PARAMS_PTR; + + typedef struct CK_X9_42_MQV_DERIVE_PARAMS { + CK_X9_42_DH_KDF_TYPE kdf; +- CK_ULONG ulOtherInfoLen; +- CK_BYTE_PTR pOtherInfo; +- CK_ULONG ulPublicDataLen; +- CK_BYTE_PTR pPublicData; +- CK_ULONG ulPrivateDataLen; +- CK_OBJECT_HANDLE hPrivateData; +- CK_ULONG ulPublicDataLen2; +- CK_BYTE_PTR pPublicData2; +- CK_OBJECT_HANDLE publicKey; ++ CK_ULONG ulOtherInfoLen; ++ CK_BYTE_PTR pOtherInfo; ++ CK_ULONG ulPublicDataLen; ++ CK_BYTE_PTR pPublicData; ++ CK_ULONG ulPrivateDataLen; ++ CK_OBJECT_HANDLE hPrivateData; ++ CK_ULONG ulPublicDataLen2; ++ CK_BYTE_PTR pPublicData2; ++ CK_OBJECT_HANDLE publicKey; + } CK_X9_42_MQV_DERIVE_PARAMS; + + typedef CK_X9_42_MQV_DERIVE_PARAMS CK_PTR CK_X9_42_MQV_DERIVE_PARAMS_PTR; + + /* CK_KEA_DERIVE_PARAMS provides the parameters to the +- * CKM_KEA_DERIVE mechanism +- */ ++ * CKM_KEA_DERIVE mechanism */ ++/* CK_KEA_DERIVE_PARAMS is new for v2.0 */ + typedef struct CK_KEA_DERIVE_PARAMS { +- CK_BBOOL isSender; +- CK_ULONG ulRandomLen; ++ CK_BBOOL isSender; ++ CK_ULONG ulRandomLen; + CK_BYTE_PTR pRandomA; + CK_BYTE_PTR pRandomB; +- CK_ULONG ulPublicDataLen; ++ CK_ULONG ulPublicDataLen; + CK_BYTE_PTR pPublicData; + } CK_KEA_DERIVE_PARAMS; + + typedef CK_KEA_DERIVE_PARAMS CK_PTR CK_KEA_DERIVE_PARAMS_PTR; + +- + /* CK_RC2_PARAMS provides the parameters to the CKM_RC2_ECB and + * CKM_RC2_MAC mechanisms. An instance of CK_RC2_PARAMS just +- * holds the effective keysize +- */ +-typedef CK_ULONG CK_RC2_PARAMS; ++ * holds the effective keysize */ ++typedef CK_ULONG CK_RC2_PARAMS; + + typedef CK_RC2_PARAMS CK_PTR CK_RC2_PARAMS_PTR; + +- + /* CK_RC2_CBC_PARAMS provides the parameters to the CKM_RC2_CBC +- * mechanism +- */ ++ * mechanism */ + typedef struct CK_RC2_CBC_PARAMS { +- CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */ +- CK_BYTE iv[8]; /* IV for CBC mode */ ++ /* ulEffectiveBits was changed from CK_USHORT to CK_ULONG for ++ * v2.0 */ ++ CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */ ++ ++ CK_BYTE iv[8]; /* IV for CBC mode */ + } CK_RC2_CBC_PARAMS; + + typedef CK_RC2_CBC_PARAMS CK_PTR CK_RC2_CBC_PARAMS_PTR; + +- + /* CK_RC2_MAC_GENERAL_PARAMS provides the parameters for the +- * CKM_RC2_MAC_GENERAL mechanism +- */ ++ * CKM_RC2_MAC_GENERAL mechanism */ ++/* CK_RC2_MAC_GENERAL_PARAMS is new for v2.0 */ + typedef struct CK_RC2_MAC_GENERAL_PARAMS { +- CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */ +- CK_ULONG ulMacLength; /* Length of MAC in bytes */ ++ CK_ULONG ulEffectiveBits; /* effective bits (1-1024) */ ++ CK_ULONG ulMacLength; /* Length of MAC in bytes */ + } CK_RC2_MAC_GENERAL_PARAMS; + +-typedef CK_RC2_MAC_GENERAL_PARAMS CK_PTR \ +- CK_RC2_MAC_GENERAL_PARAMS_PTR; +- ++typedef CK_RC2_MAC_GENERAL_PARAMS CK_PTR ++ CK_RC2_MAC_GENERAL_PARAMS_PTR; + + /* CK_RC5_PARAMS provides the parameters to the CKM_RC5_ECB and +- * CKM_RC5_MAC mechanisms +- */ ++ * CKM_RC5_MAC mechanisms */ ++/* CK_RC5_PARAMS is new for v2.0 */ + typedef struct CK_RC5_PARAMS { +- CK_ULONG ulWordsize; /* wordsize in bits */ +- CK_ULONG ulRounds; /* number of rounds */ ++ CK_ULONG ulWordsize; /* wordsize in bits */ ++ CK_ULONG ulRounds; /* number of rounds */ + } CK_RC5_PARAMS; + + typedef CK_RC5_PARAMS CK_PTR CK_RC5_PARAMS_PTR; + +- + /* CK_RC5_CBC_PARAMS provides the parameters to the CKM_RC5_CBC +- * mechanism +- */ ++ * mechanism */ ++/* CK_RC5_CBC_PARAMS is new for v2.0 */ + typedef struct CK_RC5_CBC_PARAMS { +- CK_ULONG ulWordsize; /* wordsize in bits */ +- CK_ULONG ulRounds; /* number of rounds */ +- CK_BYTE_PTR pIv; /* pointer to IV */ +- CK_ULONG ulIvLen; /* length of IV in bytes */ ++ CK_ULONG ulWordsize; /* wordsize in bits */ ++ CK_ULONG ulRounds; /* number of rounds */ ++ CK_BYTE_PTR pIv; /* pointer to IV */ ++ CK_ULONG ulIvLen; /* length of IV in bytes */ + } CK_RC5_CBC_PARAMS; + + typedef CK_RC5_CBC_PARAMS CK_PTR CK_RC5_CBC_PARAMS_PTR; + +- + /* CK_RC5_MAC_GENERAL_PARAMS provides the parameters for the +- * CKM_RC5_MAC_GENERAL mechanism +- */ ++ * CKM_RC5_MAC_GENERAL mechanism */ ++/* CK_RC5_MAC_GENERAL_PARAMS is new for v2.0 */ + typedef struct CK_RC5_MAC_GENERAL_PARAMS { +- CK_ULONG ulWordsize; /* wordsize in bits */ +- CK_ULONG ulRounds; /* number of rounds */ +- CK_ULONG ulMacLength; /* Length of MAC in bytes */ ++ CK_ULONG ulWordsize; /* wordsize in bits */ ++ CK_ULONG ulRounds; /* number of rounds */ ++ CK_ULONG ulMacLength; /* Length of MAC in bytes */ + } CK_RC5_MAC_GENERAL_PARAMS; + +-typedef CK_RC5_MAC_GENERAL_PARAMS CK_PTR \ +- CK_RC5_MAC_GENERAL_PARAMS_PTR; ++typedef CK_RC5_MAC_GENERAL_PARAMS CK_PTR ++ CK_RC5_MAC_GENERAL_PARAMS_PTR; + + /* CK_MAC_GENERAL_PARAMS provides the parameters to most block + * ciphers' MAC_GENERAL mechanisms. Its value is the length of +- * the MAC +- */ +-typedef CK_ULONG CK_MAC_GENERAL_PARAMS; ++ * the MAC */ ++/* CK_MAC_GENERAL_PARAMS is new for v2.0 */ ++typedef CK_ULONG CK_MAC_GENERAL_PARAMS; + + typedef CK_MAC_GENERAL_PARAMS CK_PTR CK_MAC_GENERAL_PARAMS_PTR; + ++/* CK_DES/AES_ECB/CBC_ENCRYPT_DATA_PARAMS are new for v2.20 */ + typedef struct CK_DES_CBC_ENCRYPT_DATA_PARAMS { +- CK_BYTE iv[8]; ++ CK_BYTE iv[8]; + CK_BYTE_PTR pData; +- CK_ULONG length; ++ CK_ULONG length; + } CK_DES_CBC_ENCRYPT_DATA_PARAMS; + +-typedef CK_DES_CBC_ENCRYPT_DATA_PARAMS CK_PTR \ +- CK_DES_CBC_ENCRYPT_DATA_PARAMS_PTR; ++typedef CK_DES_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_DES_CBC_ENCRYPT_DATA_PARAMS_PTR; + + typedef struct CK_AES_CBC_ENCRYPT_DATA_PARAMS { +- CK_BYTE iv[16]; ++ CK_BYTE iv[16]; + CK_BYTE_PTR pData; +- CK_ULONG length; ++ CK_ULONG length; + } CK_AES_CBC_ENCRYPT_DATA_PARAMS; + +-typedef CK_AES_CBC_ENCRYPT_DATA_PARAMS CK_PTR \ +- CK_AES_CBC_ENCRYPT_DATA_PARAMS_PTR; ++typedef CK_AES_CBC_ENCRYPT_DATA_PARAMS CK_PTR CK_AES_CBC_ENCRYPT_DATA_PARAMS_PTR; ++ ++/* CK_AES_CTR_PARAMS is new for PKCS #11 v2.20 amendment 3 */ ++typedef struct CK_AES_CTR_PARAMS { ++ CK_ULONG ulCounterBits; ++ CK_BYTE cb[16]; ++} CK_AES_CTR_PARAMS; ++ ++typedef CK_AES_CTR_PARAMS CK_PTR CK_AES_CTR_PARAMS_PTR; ++ ++/* CK_GCM_PARAMS is new for version 2.30 */ ++/* There was a discrepency between the doc and the headers ++ * in PKCS #11 v2.40, NSS had the doc version, but the header ++ * was normative. In V3.0 they were reconsiled as the header ++ * version. In NSS the header version is called CK_GCM_PARAMS_V3 ++ * and the v2.40 doc version is called CK_NSS_GCM_PARAMS. ++ * CK_GCM_PARMS is define as CK_NSS_GCM_PARAMS if ++ * NSS_PCKS11_2_0_COMPAT is defined and CK_GCM_PARAMS_V3 if it's not. ++ * Softoken accepts either version and internally uses CK_NSS_GCM_PARAMS */ ++typedef struct CK_GCM_PARAMS_V3 { ++ CK_BYTE_PTR pIv; ++ CK_ULONG ulIvLen; ++ CK_ULONG ulIvBits; ++ CK_BYTE_PTR pAAD; ++ CK_ULONG ulAADLen; ++ CK_ULONG ulTagBits; ++} CK_GCM_PARAMS_V3; ++ ++typedef CK_GCM_PARAMS_V3 CK_PTR CK_GCM_PARAMS_V3_PTR; ++ ++/* CK_CCM_PARAMS is new for version 2.30 */ ++typedef struct CK_CCM_PARAMS { ++ CK_ULONG ulDataLen; ++ CK_BYTE_PTR pNonce; ++ CK_ULONG ulNonceLen; ++ CK_BYTE_PTR pAAD; ++ CK_ULONG ulAADLen; ++ CK_ULONG ulMACLen; ++} CK_CCM_PARAMS; ++ ++typedef CK_CCM_PARAMS CK_PTR CK_CCM_PARAMS_PTR; ++ ++/* SALSA20_POLY1305 and CHACHA20_POLY1305 is AEAD is new in v3.0 */ ++typedef struct CK_SALSA20_CHACHA20_POLY1305_PARAMS { ++ CK_BYTE_PTR pNonce; ++ CK_ULONG ulNonceLen; ++ CK_BYTE_PTR pAAD; ++ CK_ULONG ulAADLen; ++} CK_SALSA20_CHACHA20_POLY1305_PARAMS; ++ ++typedef CK_SALSA20_CHACHA20_POLY1305_PARAMS ++ CK_PTR CK_SALSA20_CHACHA20_POLY1305_PARAMS_PTR; ++ ++/* MESSAGE params are new for v3.0 */ ++typedef CK_ULONG CK_GENERATOR_FUNCTION; ++#define CKG_NO_GENERATE 0x00000000UL ++#define CKG_GENERATE 0x00000001UL ++#define CKG_GENERATE_COUNTER 0x00000002UL ++#define CKG_GENERATE_RANDOM 0x00000003UL ++#define CKG_GENERATE_COUNTER_XOR 0x00000004UL ++ ++typedef struct CK_GCM_MESSAGE_PARAMS { ++ CK_BYTE_PTR pIv; ++ CK_ULONG ulIvLen; ++ CK_ULONG ulIvFixedBits; ++ CK_GENERATOR_FUNCTION ivGenerator; ++ CK_BYTE_PTR pTag; ++ CK_ULONG ulTagBits; ++} CK_GCM_MESSAGE_PARAMS; ++ ++typedef CK_GCM_MESSAGE_PARAMS CK_GCM_MESSAGE_PARAMS_PTR; ++ ++typedef struct CK_CCM_MESSAGE_PARAMS { ++ CK_ULONG ulDataLen; /*plaintext or ciphertext*/ ++ CK_BYTE_PTR pNonce; ++ CK_ULONG ulNonceLen; ++ CK_ULONG ulNonceFixedBits; ++ CK_GENERATOR_FUNCTION nonceGenerator; ++ CK_BYTE_PTR pMAC; ++ CK_ULONG ulMACLen; ++} CK_CCM_MESSAGE_PARAMS; ++ ++typedef CK_CCM_MESSAGE_PARAMS CK_CCM_MESSAGE_PARAMS_PTR; ++ ++/* SALSA20/CHACHA20 doe not define IV generators */ ++typedef struct CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS { ++ CK_BYTE_PTR pNonce; ++ CK_ULONG ulNonceLen; ++ CK_BYTE_PTR pTag; ++} CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS; ++ ++typedef CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS ++ CK_PTR CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS_PTR; + + /* CK_SKIPJACK_PRIVATE_WRAP_PARAMS provides the parameters to the +- * CKM_SKIPJACK_PRIVATE_WRAP mechanism +- */ ++ * CKM_SKIPJACK_PRIVATE_WRAP mechanism */ ++/* CK_SKIPJACK_PRIVATE_WRAP_PARAMS is new for v2.0 */ + typedef struct CK_SKIPJACK_PRIVATE_WRAP_PARAMS { +- CK_ULONG ulPasswordLen; ++ CK_ULONG ulPasswordLen; + CK_BYTE_PTR pPassword; +- CK_ULONG ulPublicDataLen; ++ CK_ULONG ulPublicDataLen; + CK_BYTE_PTR pPublicData; +- CK_ULONG ulPAndGLen; +- CK_ULONG ulQLen; +- CK_ULONG ulRandomLen; ++ CK_ULONG ulPAndGLen; ++ CK_ULONG ulQLen; ++ CK_ULONG ulRandomLen; + CK_BYTE_PTR pRandomA; + CK_BYTE_PTR pPrimeP; + CK_BYTE_PTR pBaseG; + CK_BYTE_PTR pSubprimeQ; + } CK_SKIPJACK_PRIVATE_WRAP_PARAMS; + +-typedef CK_SKIPJACK_PRIVATE_WRAP_PARAMS CK_PTR \ +- CK_SKIPJACK_PRIVATE_WRAP_PARAMS_PTR; +- ++typedef CK_SKIPJACK_PRIVATE_WRAP_PARAMS CK_PTR ++ CK_SKIPJACK_PRIVATE_WRAP_PTR; + + /* CK_SKIPJACK_RELAYX_PARAMS provides the parameters to the +- * CKM_SKIPJACK_RELAYX mechanism +- */ ++ * CKM_SKIPJACK_RELAYX mechanism */ ++/* CK_SKIPJACK_RELAYX_PARAMS is new for v2.0 */ + typedef struct CK_SKIPJACK_RELAYX_PARAMS { +- CK_ULONG ulOldWrappedXLen; ++ CK_ULONG ulOldWrappedXLen; + CK_BYTE_PTR pOldWrappedX; +- CK_ULONG ulOldPasswordLen; ++ CK_ULONG ulOldPasswordLen; + CK_BYTE_PTR pOldPassword; +- CK_ULONG ulOldPublicDataLen; ++ CK_ULONG ulOldPublicDataLen; + CK_BYTE_PTR pOldPublicData; +- CK_ULONG ulOldRandomLen; ++ CK_ULONG ulOldRandomLen; + CK_BYTE_PTR pOldRandomA; +- CK_ULONG ulNewPasswordLen; ++ CK_ULONG ulNewPasswordLen; + CK_BYTE_PTR pNewPassword; +- CK_ULONG ulNewPublicDataLen; ++ CK_ULONG ulNewPublicDataLen; + CK_BYTE_PTR pNewPublicData; +- CK_ULONG ulNewRandomLen; ++ CK_ULONG ulNewRandomLen; + CK_BYTE_PTR pNewRandomA; + } CK_SKIPJACK_RELAYX_PARAMS; + +-typedef CK_SKIPJACK_RELAYX_PARAMS CK_PTR \ +- CK_SKIPJACK_RELAYX_PARAMS_PTR; ++typedef CK_SKIPJACK_RELAYX_PARAMS CK_PTR ++ CK_SKIPJACK_RELAYX_PARAMS_PTR; ++ ++/* New for v2.40, CAMELLIA, ARIA, SEED */ ++typedef struct CK_CAMELLIA_CTR_PARAMS { ++ CK_ULONG ulCounterBits; ++ CK_BYTE cb[16]; ++} CK_CAMELLIA_CTR_PARAMS; ++ ++typedef CK_CAMELLIA_CTR_PARAMS CK_PTR CK_CAMELLIA_CTR_PARAMS_PTR; + ++typedef struct CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS { ++ CK_BYTE iv[16]; ++ CK_BYTE_PTR pData; ++ CK_ULONG length; ++} CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS; ++ ++typedef CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS CK_PTR ++ CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS_PTR; ++ ++typedef struct CK_ARIA_CBC_ENCRYPT_DATA_PARAMS { ++ CK_BYTE iv[16]; ++ CK_BYTE_PTR pData; ++ CK_ULONG length; ++} CK_ARIA_CBC_ENCRYPT_DATA_PARAMS; ++ ++typedef CK_ARIA_CBC_ENCRYPT_DATA_PARAMS CK_PTR ++ CK_ARIA_CBC_ENCRYPT_DATA_PARAMS_PTR; ++ ++typedef struct CK_SEED_CBC_ENCRYPT_DATA_PARAMS { ++ CK_BYTE iv[16]; ++ CK_BYTE_PTR pData; ++ CK_ULONG length; ++} CK_SEED_CBC_ENCRYPT_DATA_PARAMS; ++ ++typedef CK_SEED_CBC_ENCRYPT_DATA_PARAMS CK_PTR ++ CK_SEED_CBC_ENCRYPT_DATA_PARAMS_PTR; ++ ++/* ChaCha20/Salsa20 Counter support is new in v3.0*/ ++typedef struct CK_CHACHA20_PARAMS { ++ CK_BYTE_PTR pBlockCounter; ++ CK_ULONG blockCounterBits; ++ CK_BYTE_PTR pNonce; ++ CK_ULONG ulNonceBits; ++} CK_CHACHA20_PARAMS; ++ ++typedef CK_CHACHA20_PARAMS CK_PTR CK_CHACHA20_PARAMS_PTR; ++ ++typedef struct CK_SALSA20_PARAMS { ++ CK_BYTE_PTR pBlockCounter; ++ CK_BYTE_PTR pNonce; ++ CK_ULONG ulNonceBits; ++} CK_SALSA20_PARAMS; ++typedef CK_SALSA20_PARAMS CK_PTR CK_SALSA20_PARAMS_PTR; + + typedef struct CK_PBE_PARAMS { +- CK_BYTE_PTR pInitVector; ++ CK_BYTE_PTR pInitVector; + CK_UTF8CHAR_PTR pPassword; +- CK_ULONG ulPasswordLen; +- CK_BYTE_PTR pSalt; +- CK_ULONG ulSaltLen; +- CK_ULONG ulIteration; ++ CK_ULONG ulPasswordLen; ++ CK_BYTE_PTR pSalt; ++ CK_ULONG ulSaltLen; ++ CK_ULONG ulIteration; + } CK_PBE_PARAMS; + + typedef CK_PBE_PARAMS CK_PTR CK_PBE_PARAMS_PTR; + +- + /* CK_KEY_WRAP_SET_OAEP_PARAMS provides the parameters to the +- * CKM_KEY_WRAP_SET_OAEP mechanism +- */ ++ * CKM_KEY_WRAP_SET_OAEP mechanism */ ++/* CK_KEY_WRAP_SET_OAEP_PARAMS is new for v2.0 */ + typedef struct CK_KEY_WRAP_SET_OAEP_PARAMS { +- CK_BYTE bBC; /* block contents byte */ +- CK_BYTE_PTR pX; /* extra data */ +- CK_ULONG ulXLen; /* length of extra data in bytes */ ++ CK_BYTE bBC; /* block contents byte */ ++ CK_BYTE_PTR pX; /* extra data */ ++ CK_ULONG ulXLen; /* length of extra data in bytes */ + } CK_KEY_WRAP_SET_OAEP_PARAMS; + +-typedef CK_KEY_WRAP_SET_OAEP_PARAMS CK_PTR CK_KEY_WRAP_SET_OAEP_PARAMS_PTR; ++typedef CK_KEY_WRAP_SET_OAEP_PARAMS CK_PTR ++ CK_KEY_WRAP_SET_OAEP_PARAMS_PTR; + + typedef struct CK_SSL3_RANDOM_DATA { + CK_BYTE_PTR pClientRandom; +- CK_ULONG ulClientRandomLen; ++ CK_ULONG ulClientRandomLen; + CK_BYTE_PTR pServerRandom; +- CK_ULONG ulServerRandomLen; ++ CK_ULONG ulServerRandomLen; + } CK_SSL3_RANDOM_DATA; + +- + typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS { + CK_SSL3_RANDOM_DATA RandomInfo; +- CK_VERSION_PTR pVersion; ++ CK_VERSION_PTR pVersion; + } CK_SSL3_MASTER_KEY_DERIVE_PARAMS; + +-typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS CK_PTR \ +- CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR; ++typedef struct CK_SSL3_MASTER_KEY_DERIVE_PARAMS CK_PTR ++ CK_SSL3_MASTER_KEY_DERIVE_PARAMS_PTR; + + typedef struct CK_SSL3_KEY_MAT_OUT { + CK_OBJECT_HANDLE hClientMacSecret; + CK_OBJECT_HANDLE hServerMacSecret; + CK_OBJECT_HANDLE hClientKey; + CK_OBJECT_HANDLE hServerKey; +- CK_BYTE_PTR pIVClient; +- CK_BYTE_PTR pIVServer; ++ CK_BYTE_PTR pIVClient; ++ CK_BYTE_PTR pIVServer; + } CK_SSL3_KEY_MAT_OUT; + + typedef CK_SSL3_KEY_MAT_OUT CK_PTR CK_SSL3_KEY_MAT_OUT_PTR; + +- + typedef struct CK_SSL3_KEY_MAT_PARAMS { +- CK_ULONG ulMacSizeInBits; +- CK_ULONG ulKeySizeInBits; +- CK_ULONG ulIVSizeInBits; +- CK_BBOOL bIsExport; +- CK_SSL3_RANDOM_DATA RandomInfo; ++ CK_ULONG ulMacSizeInBits; ++ CK_ULONG ulKeySizeInBits; ++ CK_ULONG ulIVSizeInBits; ++ CK_BBOOL bIsExport; /* Unused. Must be set to CK_FALSE. */ ++ CK_SSL3_RANDOM_DATA RandomInfo; + CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial; + } CK_SSL3_KEY_MAT_PARAMS; + + typedef CK_SSL3_KEY_MAT_PARAMS CK_PTR CK_SSL3_KEY_MAT_PARAMS_PTR; + ++/* CK_TLS_PRF_PARAMS is new for version 2.20 */ + typedef struct CK_TLS_PRF_PARAMS { +- CK_BYTE_PTR pSeed; +- CK_ULONG ulSeedLen; +- CK_BYTE_PTR pLabel; +- CK_ULONG ulLabelLen; +- CK_BYTE_PTR pOutput; ++ CK_BYTE_PTR pSeed; ++ CK_ULONG ulSeedLen; ++ CK_BYTE_PTR pLabel; ++ CK_ULONG ulLabelLen; ++ CK_BYTE_PTR pOutput; + CK_ULONG_PTR pulOutputLen; + } CK_TLS_PRF_PARAMS; + + typedef CK_TLS_PRF_PARAMS CK_PTR CK_TLS_PRF_PARAMS_PTR; + ++/* TLS 1.2 is new for version 2.40 */ ++typedef struct CK_TLS12_MASTER_KEY_DERIVE_PARAMS { ++ CK_SSL3_RANDOM_DATA RandomInfo; ++ CK_VERSION_PTR pVersion; ++ CK_MECHANISM_TYPE prfHashMechanism; ++} CK_TLS12_MASTER_KEY_DERIVE_PARAMS; ++ ++typedef CK_TLS12_MASTER_KEY_DERIVE_PARAMS CK_PTR ++ CK_TLS12_MASTER_KEY_DERIVE_PARAMS_PTR; ++ ++typedef struct CK_TLS12_KEY_MAT_PARAMS { ++ CK_ULONG ulMacSizeInBits; ++ CK_ULONG ulKeySizeInBits; ++ CK_ULONG ulIVSizeInBits; ++ CK_BBOOL bIsExport; /* Unused. Must be set to CK_FALSE. */ ++ CK_SSL3_RANDOM_DATA RandomInfo; ++ CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial; ++ CK_MECHANISM_TYPE prfHashMechanism; ++} CK_TLS12_KEY_MAT_PARAMS; ++ ++typedef CK_TLS12_KEY_MAT_PARAMS CK_PTR CK_TLS12_KEY_MAT_PARAMS_PTR; ++ ++typedef struct CK_TLS_KDF_PARAMS { ++ CK_MECHANISM_TYPE prfMechanism; ++ CK_BYTE_PTR pLabel; ++ CK_ULONG ulLabelLength; ++ CK_SSL3_RANDOM_DATA RandomInfo; ++ CK_BYTE_PTR pContextData; ++ CK_ULONG ulContextDataLength; ++} CK_TLS_KDF_PARAMS; ++ ++typedef struct CK_TLS_MAC_PARAMS { ++ CK_MECHANISM_TYPE prfHashMechanism; ++ CK_ULONG ulMacLength; ++ CK_ULONG ulServerOrClient; ++} CK_TLS_MAC_PARAMS; ++ ++typedef CK_TLS_MAC_PARAMS CK_PTR CK_TLS_MAC_PARAMS_PTR; ++ ++/* HKDF is new for v3.0 */ ++typedef struct CK_HKDF_PARAMS { ++ CK_BBOOL bExtract; ++ CK_BBOOL bExpand; ++ CK_MECHANISM_TYPE prfHashMechanism; ++ CK_ULONG ulSaltType; ++ CK_BYTE_PTR pSalt; ++ CK_ULONG ulSaltLen; ++ CK_OBJECT_HANDLE hSaltKey; ++ CK_BYTE_PTR pInfo; ++ CK_ULONG ulInfoLen; ++} CK_HKDF_PARAMS; ++typedef CK_HKDF_PARAMS CK_PTR CK_HKDF_PARAMS_PTR; ++ ++#define CKF_HKDF_SALT_NULL 0x00000001UL ++#define CKF_HKDF_SALT_DATA 0x00000002UL ++#define CKF_HKDF_SALT_KEY 0x00000004UL ++ ++/* WTLS is new for version 2.20 */ + typedef struct CK_WTLS_RANDOM_DATA { + CK_BYTE_PTR pClientRandom; +- CK_ULONG ulClientRandomLen; ++ CK_ULONG ulClientRandomLen; + CK_BYTE_PTR pServerRandom; +- CK_ULONG ulServerRandomLen; ++ CK_ULONG ulServerRandomLen; + } CK_WTLS_RANDOM_DATA; + + typedef CK_WTLS_RANDOM_DATA CK_PTR CK_WTLS_RANDOM_DATA_PTR; + + typedef struct CK_WTLS_MASTER_KEY_DERIVE_PARAMS { +- CK_MECHANISM_TYPE DigestMechanism; ++ CK_MECHANISM_TYPE DigestMechanism; + CK_WTLS_RANDOM_DATA RandomInfo; +- CK_BYTE_PTR pVersion; ++ CK_BYTE_PTR pVersion; + } CK_WTLS_MASTER_KEY_DERIVE_PARAMS; + +-typedef CK_WTLS_MASTER_KEY_DERIVE_PARAMS CK_PTR \ +- CK_WTLS_MASTER_KEY_DERIVE_PARAMS_PTR; ++typedef CK_WTLS_MASTER_KEY_DERIVE_PARAMS CK_PTR ++ CK_WTLS_MASTER_KEY_DERIVE_PARAMS_PTR; + + typedef struct CK_WTLS_PRF_PARAMS { + CK_MECHANISM_TYPE DigestMechanism; +- CK_BYTE_PTR pSeed; +- CK_ULONG ulSeedLen; +- CK_BYTE_PTR pLabel; +- CK_ULONG ulLabelLen; +- CK_BYTE_PTR pOutput; +- CK_ULONG_PTR pulOutputLen; ++ CK_BYTE_PTR pSeed; ++ CK_ULONG ulSeedLen; ++ CK_BYTE_PTR pLabel; ++ CK_ULONG ulLabelLen; ++ CK_BYTE_PTR pOutput; ++ CK_ULONG_PTR pulOutputLen; + } CK_WTLS_PRF_PARAMS; + + typedef CK_WTLS_PRF_PARAMS CK_PTR CK_WTLS_PRF_PARAMS_PTR; +@@ -1864,581 +2215,377 @@ typedef CK_WTLS_PRF_PARAMS CK_PTR CK_WTL + typedef struct CK_WTLS_KEY_MAT_OUT { + CK_OBJECT_HANDLE hMacSecret; + CK_OBJECT_HANDLE hKey; +- CK_BYTE_PTR pIV; ++ CK_BYTE_PTR pIV; + } CK_WTLS_KEY_MAT_OUT; + + typedef CK_WTLS_KEY_MAT_OUT CK_PTR CK_WTLS_KEY_MAT_OUT_PTR; + + typedef struct CK_WTLS_KEY_MAT_PARAMS { +- CK_MECHANISM_TYPE DigestMechanism; +- CK_ULONG ulMacSizeInBits; +- CK_ULONG ulKeySizeInBits; +- CK_ULONG ulIVSizeInBits; +- CK_ULONG ulSequenceNumber; +- CK_BBOOL bIsExport; +- CK_WTLS_RANDOM_DATA RandomInfo; ++ CK_MECHANISM_TYPE DigestMechanism; ++ CK_ULONG ulMacSizeInBits; ++ CK_ULONG ulKeySizeInBits; ++ CK_ULONG ulIVSizeInBits; ++ CK_ULONG ulSequenceNumber; ++ CK_BBOOL bIsExport; /* Unused. Must be set to CK_FALSE. */ ++ CK_WTLS_RANDOM_DATA RandomInfo; + CK_WTLS_KEY_MAT_OUT_PTR pReturnedKeyMaterial; + } CK_WTLS_KEY_MAT_PARAMS; + + typedef CK_WTLS_KEY_MAT_PARAMS CK_PTR CK_WTLS_KEY_MAT_PARAMS_PTR; + ++/* The following types for NIST 800-108 KBKDF are defined in PKCS#11 v3.0 */ ++typedef CK_MECHANISM_TYPE CK_SP800_108_PRF_TYPE; ++typedef CK_ULONG CK_PRF_DATA_TYPE; ++ ++#define CK_SP800_108_ITERATION_VARIABLE 0x00000001UL ++#define CK_SP800_108_OPTIONAL_COUNTER 0x00000002UL ++#define CK_SP800_108_DKM_LENGTH 0x00000003UL ++#define CK_SP800_108_BYTE_ARRAY 0x00000004UL ++ ++/* ERRATA: PKCS#11 v3.0 Cryptographic Token Interface Current Mechanisms ++ * specification specifies a CK_SP800_108_COUNTER, while the pkcs11t.h from ++ * PKCS#11 v3.0 Cryptographic Token Interface Base Specification specifies ++ * CK_SP800_108_OPTIONAL_COUNTER. */ ++#define CK_SP800_108_COUNTER CK_SP800_108_OPTIONAL_COUNTER ++ ++typedef struct CK_PRF_DATA_PARAM { ++ CK_PRF_DATA_TYPE type; ++ CK_VOID_PTR pValue; ++ CK_ULONG ulValueLen; ++} CK_PRF_DATA_PARAM; ++ ++typedef CK_PRF_DATA_PARAM CK_PTR CK_PRF_DATA_PARAM_PTR; ++ ++typedef struct CK_SP800_108_COUNTER_FORMAT { ++ CK_BBOOL bLittleEndian; ++ CK_ULONG ulWidthInBits; ++} CK_SP800_108_COUNTER_FORMAT; ++ ++typedef CK_SP800_108_COUNTER_FORMAT CK_PTR CK_SP800_108_COUNTER_FORMAT_PTR; ++ ++typedef CK_ULONG CK_SP800_108_DKM_LENGTH_METHOD; ++ ++/* ERRATA: PKCS#11 v3.0 Cryptographic Token Interface Current Mechanisms ++ * defines that these constants exist, but doesn't specify values. pkcs11t.h ++ * from PKCS#11 v3.0 Cryptographic Token Interface Base Specification doesn't ++ * define these constants either. */ ++#define CK_SP800_108_DKM_LENGTH_SUM_OF_KEYS 0x00000001UL ++#define CK_SP800_108_DKM_LENGTH_SUM_OF_SEGMENTS 0x00000002UL ++ ++typedef struct CK_SP800_108_DKM_LENGTH_FORMAT { ++ CK_SP800_108_DKM_LENGTH_METHOD dkmLengthMethod; ++ CK_BBOOL bLittleEndian; ++ CK_ULONG ulWidthInBits; ++} CK_SP800_108_DKM_LENGTH_FORMAT; ++ ++typedef CK_SP800_108_DKM_LENGTH_FORMAT CK_PTR CK_SP800_108_DKM_LENGTH_FORMAT_PTR; ++ ++typedef struct CK_DERIVED_KEY { ++ CK_ATTRIBUTE_PTR pTemplate; ++ CK_ULONG ulAttributeCount; ++ CK_OBJECT_HANDLE_PTR phKey; ++} CK_DERIVED_KEY; ++ ++typedef CK_DERIVED_KEY CK_PTR CK_DERIVED_KEY_PTR; ++ ++/* UNFIXED ERRATA: NIST SP800-108 specifies that implementer can decide the ++ * number of bits to take from each PRF invocation. However, all three forms ++ * of the PKCS#11 v3.0 implementation lack a bitwidth for the PRF and only ++ * allow the full-width mechanism varieties. Additionally, outside of the ++ * base key (used as the key to the PRF), there is no way to pass any ++ * additional, PRF-mechanism specific data. */ ++ ++typedef struct CK_SP800_108_KDF_PARAMS { ++ CK_SP800_108_PRF_TYPE prfType; ++ CK_ULONG ulNumberOfDataParams; ++ CK_PRF_DATA_PARAM_PTR pDataParams; ++ CK_ULONG ulAdditionalDerivedKeys; ++ /* ERRATA: in PKCS#11 v3.0, pAdditionalDerivedKeys is typed as ++ * CK_DERVIED_KEY; it needs to be of type CK_DERIVED_KEY_PTR. */ ++ CK_DERIVED_KEY_PTR pAdditionalDerivedKeys; ++} CK_SP800_108_KDF_PARAMS; ++ ++typedef CK_SP800_108_KDF_PARAMS CK_PTR CK_SP800_108_KDF_PARAMS_PTR; ++ ++typedef struct CK_SP800_108_FEEDBACK_KDF_PARAMS { ++ CK_SP800_108_PRF_TYPE prfType; ++ CK_ULONG ulNumberOfDataParams; ++ CK_PRF_DATA_PARAM_PTR pDataParams; ++ CK_ULONG ulIVLen; ++ CK_BYTE_PTR pIV; ++ CK_ULONG ulAdditionalDerivedKeys; ++ /* ERRATA: in PKCS#11 v3.0, pAdditionalDerivedKeys is typed as ++ * CK_DERVIED_KEY; it needs to be of type CK_DERIVED_KEY_PTR. */ ++ CK_DERIVED_KEY_PTR pAdditionalDerivedKeys; ++} CK_SP800_108_FEEDBACK_KDF_PARAMS; ++ ++typedef CK_SP800_108_FEEDBACK_KDF_PARAMS CK_PTR CK_SP800_108_FEEDBACK_KDF_PARAMS_PTR; ++ ++/* CMS is new for version 2.20 */ + typedef struct CK_CMS_SIG_PARAMS { + CK_OBJECT_HANDLE certificateHandle; + CK_MECHANISM_PTR pSigningMechanism; + CK_MECHANISM_PTR pDigestMechanism; +- CK_UTF8CHAR_PTR pContentType; +- CK_BYTE_PTR pRequestedAttributes; +- CK_ULONG ulRequestedAttributesLen; +- CK_BYTE_PTR pRequiredAttributes; +- CK_ULONG ulRequiredAttributesLen; ++ CK_UTF8CHAR_PTR pContentType; ++ CK_BYTE_PTR pRequestedAttributes; ++ CK_ULONG ulRequestedAttributesLen; ++ CK_BYTE_PTR pRequiredAttributes; ++ CK_ULONG ulRequiredAttributesLen; + } CK_CMS_SIG_PARAMS; + + typedef CK_CMS_SIG_PARAMS CK_PTR CK_CMS_SIG_PARAMS_PTR; + + typedef struct CK_KEY_DERIVATION_STRING_DATA { + CK_BYTE_PTR pData; +- CK_ULONG ulLen; ++ CK_ULONG ulLen; + } CK_KEY_DERIVATION_STRING_DATA; + +-typedef CK_KEY_DERIVATION_STRING_DATA CK_PTR \ +- CK_KEY_DERIVATION_STRING_DATA_PTR; +- ++typedef CK_KEY_DERIVATION_STRING_DATA CK_PTR ++ CK_KEY_DERIVATION_STRING_DATA_PTR; + + /* The CK_EXTRACT_PARAMS is used for the + * CKM_EXTRACT_KEY_FROM_KEY mechanism. It specifies which bit + * of the base key should be used as the first bit of the +- * derived key +- */ ++ * derived key */ ++/* CK_EXTRACT_PARAMS is new for v2.0 */ + typedef CK_ULONG CK_EXTRACT_PARAMS; + + typedef CK_EXTRACT_PARAMS CK_PTR CK_EXTRACT_PARAMS_PTR; + +-/* CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is used to ++/* CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is new for v2.10. ++ * CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE is used to + * indicate the Pseudo-Random Function (PRF) used to generate +- * key bits using PKCS #5 PBKDF2. +- */ ++ * key bits using PKCS #5 PBKDF2. */ + typedef CK_ULONG CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE; + +-typedef CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE CK_PTR \ +- CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE_PTR; ++typedef CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE CK_PTR CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE_PTR; + +-#define CKP_PKCS5_PBKD2_HMAC_SHA1 0x00000001UL +-#define CKP_PKCS5_PBKD2_HMAC_GOSTR3411 0x00000002UL +-#define CKP_PKCS5_PBKD2_HMAC_SHA224 0x00000003UL +-#define CKP_PKCS5_PBKD2_HMAC_SHA256 0x00000004UL +-#define CKP_PKCS5_PBKD2_HMAC_SHA384 0x00000005UL +-#define CKP_PKCS5_PBKD2_HMAC_SHA512 0x00000006UL +-#define CKP_PKCS5_PBKD2_HMAC_SHA512_224 0x00000007UL +-#define CKP_PKCS5_PBKD2_HMAC_SHA512_256 0x00000008UL ++/* The following PRFs are defined in PKCS #5 v2.1. */ ++#define CKP_PKCS5_PBKD2_HMAC_SHA1 0x00000001UL ++#define CKP_PKCS5_PBKD2_HMAC_GOSTR3411 0x00000002UL ++#define CKP_PKCS5_PBKD2_HMAC_SHA224 0x00000003UL ++#define CKP_PKCS5_PBKD2_HMAC_SHA256 0x00000004UL ++#define CKP_PKCS5_PBKD2_HMAC_SHA384 0x00000005UL ++#define CKP_PKCS5_PBKD2_HMAC_SHA512 0x00000006UL ++#define CKP_PKCS5_PBKD2_HMAC_SHA512_224 0x00000007UL ++#define CKP_PKCS5_PBKD2_HMAC_SHA512_256 0x00000008UL + +-/* CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is used to indicate the ++/* CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is new for v2.10. ++ * CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE is used to indicate the + * source of the salt value when deriving a key using PKCS #5 +- * PBKDF2. +- */ ++ * PBKDF2. */ + typedef CK_ULONG CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE; + +-typedef CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE CK_PTR \ +- CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE_PTR; ++typedef CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE CK_PTR CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE_PTR; + + /* The following salt value sources are defined in PKCS #5 v2.0. */ +-#define CKZ_SALT_SPECIFIED 0x00000001UL ++#define CKZ_SALT_SPECIFIED 0x00000001UL + +-/* CK_PKCS5_PBKD2_PARAMS is a structure that provides the +- * parameters to the CKM_PKCS5_PBKD2 mechanism. +- */ ++/* CK_PKCS5_PBKD2_PARAMS is new for v2.10. ++ * CK_PKCS5_PBKD2_PARAMS is a structure that provides the ++ * parameters to the CKM_PKCS5_PBKD2 mechanism. */ ++/* this structure is kept for compatibility. use _PARAMS2. */ + typedef struct CK_PKCS5_PBKD2_PARAMS { +- CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource; +- CK_VOID_PTR pSaltSourceData; +- CK_ULONG ulSaltSourceDataLen; +- CK_ULONG iterations; ++ CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource; ++ CK_VOID_PTR pSaltSourceData; ++ CK_ULONG ulSaltSourceDataLen; ++ CK_ULONG iterations; + CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf; +- CK_VOID_PTR pPrfData; +- CK_ULONG ulPrfDataLen; +- CK_UTF8CHAR_PTR pPassword; +- CK_ULONG_PTR ulPasswordLen; ++ CK_VOID_PTR pPrfData; ++ CK_ULONG ulPrfDataLen; ++ CK_UTF8CHAR_PTR pPassword; ++ CK_ULONG_PTR ulPasswordLen; + } CK_PKCS5_PBKD2_PARAMS; + + typedef CK_PKCS5_PBKD2_PARAMS CK_PTR CK_PKCS5_PBKD2_PARAMS_PTR; + +-/* CK_PKCS5_PBKD2_PARAMS2 is a corrected version of the CK_PKCS5_PBKD2_PARAMS +- * structure that provides the parameters to the CKM_PKCS5_PBKD2 mechanism +- * noting that the ulPasswordLen field is a CK_ULONG and not a CK_ULONG_PTR. +- */ + typedef struct CK_PKCS5_PBKD2_PARAMS2 { +- CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource; +- CK_VOID_PTR pSaltSourceData; +- CK_ULONG ulSaltSourceDataLen; +- CK_ULONG iterations; ++ CK_PKCS5_PBKDF2_SALT_SOURCE_TYPE saltSource; ++ CK_VOID_PTR pSaltSourceData; ++ CK_ULONG ulSaltSourceDataLen; ++ CK_ULONG iterations; + CK_PKCS5_PBKD2_PSEUDO_RANDOM_FUNCTION_TYPE prf; +- CK_VOID_PTR pPrfData; +- CK_ULONG ulPrfDataLen; +- CK_UTF8CHAR_PTR pPassword; +- CK_ULONG ulPasswordLen; ++ CK_VOID_PTR pPrfData; ++ CK_ULONG ulPrfDataLen; ++ CK_UTF8CHAR_PTR pPassword; ++ CK_ULONG ulPasswordLen; + } CK_PKCS5_PBKD2_PARAMS2; + + typedef CK_PKCS5_PBKD2_PARAMS2 CK_PTR CK_PKCS5_PBKD2_PARAMS2_PTR; + ++/* OTP is new in v2.40 */ + typedef CK_ULONG CK_OTP_PARAM_TYPE; +-typedef CK_OTP_PARAM_TYPE CK_PARAM_TYPE; /* backward compatibility */ ++#define CK_OTP_VALUE 0UL ++#define CK_OTP_PIN 1UL ++#define CK_OTP_CHALLENGE 2UL ++#define CK_OTP_TIME 3UL ++#define CK_OTP_COUNTER 4UL ++#define CK_OTP_FLAGS 5UL ++#define CK_OTP_OUTPUT_LENGTH 6UL ++#define CK_OTP_OUTPUT_FORMAT 7UL + + typedef struct CK_OTP_PARAM { + CK_OTP_PARAM_TYPE type; +- CK_VOID_PTR pValue; +- CK_ULONG ulValueLen; ++ CK_VOID_PTR pValue; ++ CK_ULONG ulValueLen; + } CK_OTP_PARAM; + + typedef CK_OTP_PARAM CK_PTR CK_OTP_PARAM_PTR; + + typedef struct CK_OTP_PARAMS { + CK_OTP_PARAM_PTR pParams; +- CK_ULONG ulCount; ++ CK_ULONG ulCount; + } CK_OTP_PARAMS; + + typedef CK_OTP_PARAMS CK_PTR CK_OTP_PARAMS_PTR; + + typedef struct CK_OTP_SIGNATURE_INFO { + CK_OTP_PARAM_PTR pParams; +- CK_ULONG ulCount; ++ CK_ULONG ulCount; + } CK_OTP_SIGNATURE_INFO; + + typedef CK_OTP_SIGNATURE_INFO CK_PTR CK_OTP_SIGNATURE_INFO_PTR; + +-#define CK_OTP_VALUE 0UL +-#define CK_OTP_PIN 1UL +-#define CK_OTP_CHALLENGE 2UL +-#define CK_OTP_TIME 3UL +-#define CK_OTP_COUNTER 4UL +-#define CK_OTP_FLAGS 5UL +-#define CK_OTP_OUTPUT_LENGTH 6UL +-#define CK_OTP_OUTPUT_FORMAT 7UL +- +-#define CKF_NEXT_OTP 0x00000001UL +-#define CKF_EXCLUDE_TIME 0x00000002UL +-#define CKF_EXCLUDE_COUNTER 0x00000004UL ++#define CKF_NEXT_OTP 0x00000001UL ++#define CKF_EXCLUDE_TIME 0x00000002UL ++#define CKF_EXCLUDE_COUNTER 0x00000004UL + #define CKF_EXCLUDE_CHALLENGE 0x00000008UL +-#define CKF_EXCLUDE_PIN 0x00000010UL ++#define CKF_EXCLUDE_PIN 0x00000010UL + #define CKF_USER_FRIENDLY_OTP 0x00000020UL + ++/* KIP is new in v2.40 */ + typedef struct CK_KIP_PARAMS { + CK_MECHANISM_PTR pMechanism; + CK_OBJECT_HANDLE hKey; +- CK_BYTE_PTR pSeed; +- CK_ULONG ulSeedLen; ++ CK_BYTE_PTR pSeed; ++ CK_ULONG ulSeedLen; + } CK_KIP_PARAMS; + + typedef CK_KIP_PARAMS CK_PTR CK_KIP_PARAMS_PTR; + +-typedef struct CK_AES_CTR_PARAMS { +- CK_ULONG ulCounterBits; +- CK_BYTE cb[16]; +-} CK_AES_CTR_PARAMS; +- +-typedef CK_AES_CTR_PARAMS CK_PTR CK_AES_CTR_PARAMS_PTR; +- +-typedef struct CK_GCM_PARAMS { +- CK_BYTE_PTR pIv; +- CK_ULONG ulIvLen; +- CK_ULONG ulIvBits; +- CK_BYTE_PTR pAAD; +- CK_ULONG ulAADLen; +- CK_ULONG ulTagBits; +-} CK_GCM_PARAMS; +- +-typedef CK_GCM_PARAMS CK_PTR CK_GCM_PARAMS_PTR; +- +-typedef CK_ULONG CK_GENERATOR_FUNCTION; +-#define CKG_NO_GENERATE 0x00000000UL +-#define CKG_GENERATE 0x00000001UL +-#define CKG_GENERATE_COUNTER 0x00000002UL +-#define CKG_GENERATE_RANDOM 0x00000003UL +- +-typedef struct CK_GCM_MESSAGE_PARAMS { +- CK_BYTE_PTR pIv; +- CK_ULONG ulIvLen; +- CK_ULONG ulIvFixedBits; +- CK_GENERATOR_FUNCTION ivGenerator; +- CK_BYTE_PTR pTag; +- CK_ULONG ulTagBits; +-} CK_GCM_MESSAGE_PARAMS; +- +-typedef CK_GCM_MESSAGE_PARAMS CK_GCM_MESSAGE_PARAMS_PTR; +- +-typedef struct CK_CCM_PARAMS { +- CK_ULONG ulDataLen; +- CK_BYTE_PTR pNonce; +- CK_ULONG ulNonceLen; +- CK_BYTE_PTR pAAD; +- CK_ULONG ulAADLen; +- CK_ULONG ulMACLen; +-} CK_CCM_PARAMS; +- +-typedef CK_CCM_PARAMS CK_PTR CK_CCM_PARAMS_PTR; +- +-typedef struct CK_CCM_MESSAGE_PARAMS { +- CK_ULONG ulDataLen; /*plaintext or ciphertext*/ +- CK_BYTE_PTR pNonce; +- CK_ULONG ulNonceLen; +- CK_ULONG ulNonceFixedBits; +- CK_GENERATOR_FUNCTION nonceGenerator; +- CK_BYTE_PTR pMAC; +- CK_ULONG ulMACLen; +-} CK_CCM_MESSAGE_PARAMS; +- +-typedef CK_CCM_MESSAGE_PARAMS CK_CCM_MESSAGE_PARAMS_PTR; +- +-/* Deprecated. Use CK_GCM_PARAMS */ +-typedef struct CK_AES_GCM_PARAMS { +- CK_BYTE_PTR pIv; +- CK_ULONG ulIvLen; +- CK_ULONG ulIvBits; +- CK_BYTE_PTR pAAD; +- CK_ULONG ulAADLen; +- CK_ULONG ulTagBits; +-} CK_AES_GCM_PARAMS; +- +-typedef CK_AES_GCM_PARAMS CK_PTR CK_AES_GCM_PARAMS_PTR; +- +-/* Deprecated. Use CK_CCM_PARAMS */ +-typedef struct CK_AES_CCM_PARAMS { +- CK_ULONG ulDataLen; +- CK_BYTE_PTR pNonce; +- CK_ULONG ulNonceLen; +- CK_BYTE_PTR pAAD; +- CK_ULONG ulAADLen; +- CK_ULONG ulMACLen; +-} CK_AES_CCM_PARAMS; +- +-typedef CK_AES_CCM_PARAMS CK_PTR CK_AES_CCM_PARAMS_PTR; +- +-typedef struct CK_CAMELLIA_CTR_PARAMS { +- CK_ULONG ulCounterBits; +- CK_BYTE cb[16]; +-} CK_CAMELLIA_CTR_PARAMS; +- +-typedef CK_CAMELLIA_CTR_PARAMS CK_PTR CK_CAMELLIA_CTR_PARAMS_PTR; +- +-typedef struct CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS { +- CK_BYTE iv[16]; +- CK_BYTE_PTR pData; +- CK_ULONG length; +-} CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS; +- +-typedef CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS CK_PTR \ +- CK_CAMELLIA_CBC_ENCRYPT_DATA_PARAMS_PTR; +- +-typedef struct CK_ARIA_CBC_ENCRYPT_DATA_PARAMS { +- CK_BYTE iv[16]; +- CK_BYTE_PTR pData; +- CK_ULONG length; +-} CK_ARIA_CBC_ENCRYPT_DATA_PARAMS; +- +-typedef CK_ARIA_CBC_ENCRYPT_DATA_PARAMS CK_PTR \ +- CK_ARIA_CBC_ENCRYPT_DATA_PARAMS_PTR; +- ++/* DSA Param Gen is new for v2.40 */ + typedef struct CK_DSA_PARAMETER_GEN_PARAM { + CK_MECHANISM_TYPE hash; +- CK_BYTE_PTR pSeed; +- CK_ULONG ulSeedLen; +- CK_ULONG ulIndex; ++ CK_BYTE_PTR pSeed; ++ CK_ULONG ulSeedLen; ++ CK_ULONG ulIndex; + } CK_DSA_PARAMETER_GEN_PARAM; + + typedef CK_DSA_PARAMETER_GEN_PARAM CK_PTR CK_DSA_PARAMETER_GEN_PARAM_PTR; + ++/* XXXX_AES_KEY_WRAP is new for v2.40 */ + typedef struct CK_ECDH_AES_KEY_WRAP_PARAMS { +- CK_ULONG ulAESKeyBits; ++ CK_ULONG ulAESKeyBits; + CK_EC_KDF_TYPE kdf; +- CK_ULONG ulSharedDataLen; +- CK_BYTE_PTR pSharedData; ++ CK_ULONG ulSharedDataLen; ++ CK_BYTE_PTR pSharedData; + } CK_ECDH_AES_KEY_WRAP_PARAMS; + + typedef CK_ECDH_AES_KEY_WRAP_PARAMS CK_PTR CK_ECDH_AES_KEY_WRAP_PARAMS_PTR; + +-typedef CK_ULONG CK_JAVA_MIDP_SECURITY_DOMAIN; +- +-typedef CK_ULONG CK_CERTIFICATE_CATEGORY; +- + typedef struct CK_RSA_AES_KEY_WRAP_PARAMS { +- CK_ULONG ulAESKeyBits; ++ CK_ULONG ulAESKeyBits; + CK_RSA_PKCS_OAEP_PARAMS_PTR pOAEPParams; + } CK_RSA_AES_KEY_WRAP_PARAMS; + + typedef CK_RSA_AES_KEY_WRAP_PARAMS CK_PTR CK_RSA_AES_KEY_WRAP_PARAMS_PTR; + +-typedef struct CK_TLS12_MASTER_KEY_DERIVE_PARAMS { +- CK_SSL3_RANDOM_DATA RandomInfo; +- CK_VERSION_PTR pVersion; +- CK_MECHANISM_TYPE prfHashMechanism; +-} CK_TLS12_MASTER_KEY_DERIVE_PARAMS; +- +-typedef CK_TLS12_MASTER_KEY_DERIVE_PARAMS CK_PTR \ +- CK_TLS12_MASTER_KEY_DERIVE_PARAMS_PTR; +- +-typedef struct CK_TLS12_KEY_MAT_PARAMS { +- CK_ULONG ulMacSizeInBits; +- CK_ULONG ulKeySizeInBits; +- CK_ULONG ulIVSizeInBits; +- CK_BBOOL bIsExport; +- CK_SSL3_RANDOM_DATA RandomInfo; +- CK_SSL3_KEY_MAT_OUT_PTR pReturnedKeyMaterial; +- CK_MECHANISM_TYPE prfHashMechanism; +-} CK_TLS12_KEY_MAT_PARAMS; +- +-typedef CK_TLS12_KEY_MAT_PARAMS CK_PTR CK_TLS12_KEY_MAT_PARAMS_PTR; +- +-typedef struct CK_TLS_KDF_PARAMS { +- CK_MECHANISM_TYPE prfMechanism; +- CK_BYTE_PTR pLabel; +- CK_ULONG ulLabelLength; +- CK_SSL3_RANDOM_DATA RandomInfo; +- CK_BYTE_PTR pContextData; +- CK_ULONG ulContextDataLength; +-} CK_TLS_KDF_PARAMS; +- +-typedef CK_TLS_KDF_PARAMS CK_PTR CK_TLS_KDF_PARAMS_PTR; +- +-typedef struct CK_TLS_MAC_PARAMS { +- CK_MECHANISM_TYPE prfHashMechanism; +- CK_ULONG ulMacLength; +- CK_ULONG ulServerOrClient; +-} CK_TLS_MAC_PARAMS; +- +-typedef CK_TLS_MAC_PARAMS CK_PTR CK_TLS_MAC_PARAMS_PTR; +- ++/* GOSTR3410 is new for v2.40 */ + typedef struct CK_GOSTR3410_DERIVE_PARAMS { + CK_EC_KDF_TYPE kdf; +- CK_BYTE_PTR pPublicData; +- CK_ULONG ulPublicDataLen; +- CK_BYTE_PTR pUKM; +- CK_ULONG ulUKMLen; ++ CK_BYTE_PTR pPublicData; ++ CK_ULONG ulPublicDataLen; ++ CK_BYTE_PTR pUKM; ++ CK_ULONG ulUKMLen; + } CK_GOSTR3410_DERIVE_PARAMS; + + typedef CK_GOSTR3410_DERIVE_PARAMS CK_PTR CK_GOSTR3410_DERIVE_PARAMS_PTR; + + typedef struct CK_GOSTR3410_KEY_WRAP_PARAMS { +- CK_BYTE_PTR pWrapOID; +- CK_ULONG ulWrapOIDLen; +- CK_BYTE_PTR pUKM; +- CK_ULONG ulUKMLen; ++ CK_BYTE_PTR pWrapOID; ++ CK_ULONG ulWrapOIDLen; ++ CK_BYTE_PTR pUKM; ++ CK_ULONG ulUKMLen; + CK_OBJECT_HANDLE hKey; + } CK_GOSTR3410_KEY_WRAP_PARAMS; + + typedef CK_GOSTR3410_KEY_WRAP_PARAMS CK_PTR CK_GOSTR3410_KEY_WRAP_PARAMS_PTR; + +-typedef struct CK_SEED_CBC_ENCRYPT_DATA_PARAMS { +- CK_BYTE iv[16]; +- CK_BYTE_PTR pData; +- CK_ULONG length; +-} CK_SEED_CBC_ENCRYPT_DATA_PARAMS; +- +-typedef CK_SEED_CBC_ENCRYPT_DATA_PARAMS CK_PTR \ +- CK_SEED_CBC_ENCRYPT_DATA_PARAMS_PTR; +- +-/* +- * New PKCS 11 v3.0 data structures. +- */ +- +-typedef CK_ULONG CK_PROFILE_ID; +-typedef CK_PROFILE_ID CK_PTR CK_PROFILE_ID_PTR; +- +-/* Typedefs for Flexible KDF */ +-typedef CK_ULONG CK_PRF_DATA_TYPE; +-typedef CK_MECHANISM_TYPE CK_SP800_108_PRF_TYPE; +-#define CK_SP800_108_ITERATION_VARIABLE 0x00000001UL +-#define CK_SP800_108_OPTIONAL_COUNTER 0x00000002UL +-#define CK_SP800_108_DKM_LENGTH 0x00000003UL +-#define CK_SP800_108_BYTE_ARRAY 0x00000004UL +-#define CK_SP800_108_COUNTER CK_SP800_108_OPTIONAL_COUNTER +- +-typedef struct CK_PRF_DATA_PARAM +-{ +- CK_PRF_DATA_TYPE type; +- CK_VOID_PTR pValue; +- CK_ULONG ulValueLen; +-} CK_PRF_DATA_PARAM; +- +-typedef CK_PRF_DATA_PARAM CK_PTR CK_PRF_DATA_PARAM_PTR; +- +- +-typedef struct CK_SP800_108_COUNTER_FORMAT +-{ +- CK_BBOOL bLittleEndian; +- CK_ULONG ulWidthInBits; +-} CK_SP800_108_COUNTER_FORMAT; +- +-typedef CK_SP800_108_COUNTER_FORMAT CK_PTR CK_SP800_108_COUNTER_FORMAT_PTR; +- +-typedef CK_ULONG CK_SP800_108_DKM_LENGTH_METHOD; +-#define CK_SP800_108_DKM_LENGTH_SUM_OF_KEYS 0x00000001UL +-#define CK_SP800_108_DKM_LENGTH_SUM_OF_SEGMENTS 0x00000002UL +- +-typedef struct CK_SP800_108_DKM_LENGTH_FORMAT +-{ +- CK_SP800_108_DKM_LENGTH_METHOD dkmLengthMethod; +- CK_BBOOL bLittleEndian; +- CK_ULONG ulWidthInBits; +-} CK_SP800_108_DKM_LENGTH_FORMAT; +- +-typedef CK_SP800_108_DKM_LENGTH_FORMAT \ +- CK_PTR CK_SP800_108_DKM_LENGTH_FORMAT_PTR; +- +-typedef struct CK_DERIVED_KEY +-{ +- CK_ATTRIBUTE_PTR pTemplate; +- CK_ULONG ulAttributeCount; +- CK_OBJECT_HANDLE_PTR phKey; +-} CK_DERIVED_KEY; +- +-typedef CK_DERIVED_KEY CK_PTR CK_DERIVED_KEY_PTR; +- +-typedef struct CK_SP800_108_KDF_PARAMS +-{ +- CK_SP800_108_PRF_TYPE prfType; +- CK_ULONG ulNumberOfDataParams; +- CK_PRF_DATA_PARAM_PTR pDataParams; +- CK_ULONG ulAdditionalDerivedKeys; +- CK_DERIVED_KEY_PTR pAdditionalDerivedKeys; +-} CK_SP800_108_KDF_PARAMS; +- +-typedef CK_SP800_108_KDF_PARAMS CK_PTR CK_SP800_108_KDF_PARAMS_PTR; +- +-typedef struct CK_SP800_108_FEEDBACK_KDF_PARAMS +-{ +- CK_SP800_108_PRF_TYPE prfType; +- CK_ULONG ulNumberOfDataParams; +- CK_PRF_DATA_PARAM_PTR pDataParams; +- CK_ULONG ulIVLen; +- CK_BYTE_PTR pIV; +- CK_ULONG ulAdditionalDerivedKeys; +- CK_DERIVED_KEY_PTR pAdditionalDerivedKeys; +-} CK_SP800_108_FEEDBACK_KDF_PARAMS; +- +-typedef CK_SP800_108_FEEDBACK_KDF_PARAMS \ +- CK_PTR CK_SP800_108_FEEDBACK_KDF_PARAMS_PTR; +- +-/* EDDSA */ ++/* EDDSA and XEDDSA are new for v3.0 */ + typedef struct CK_EDDSA_PARAMS { +- CK_BBOOL phFlag; +- CK_ULONG ulContextDataLen; ++ CK_BBOOL phFlag; ++ CK_ULONG ulContextDataLen; + CK_BYTE_PTR pContextData; + } CK_EDDSA_PARAMS; ++typedef CK_ULONG CK_XEDDSA_HASH_TYPE; ++typedef CK_XEDDSA_HASH_TYPE CK_PTR CK_XEDDSA_HASH_TYPE_PTR; + +-typedef CK_EDDSA_PARAMS CK_PTR CK_EDDSA_PARAMS_PTR; +- +-/* Extended ChaCha20/Salsa20 support*/ +-typedef struct CK_CHACHA20_PARAMS { +- CK_BYTE_PTR pBlockCounter; +- CK_ULONG blockCounterBits; +- CK_BYTE_PTR pNonce; +- CK_ULONG ulNonceBits; +-} CK_CHACHA20_PARAMS; +- +-typedef CK_CHACHA20_PARAMS CK_PTR CK_CHACHA20_PARAMS_PTR; +- +-typedef struct CK_SALSA20_PARAMS { +- CK_BYTE_PTR pBlockCounter; +- CK_BYTE_PTR pNonce; +- CK_ULONG ulNonceBits; +-} CK_SALSA20_PARAMS; +- +-typedef CK_SALSA20_PARAMS CK_PTR CK_SALSA20_PARAMS_PTR; +- +-typedef struct CK_SALSA20_CHACHA20_POLY1305_PARAMS { +- CK_BYTE_PTR pNonce; +- CK_ULONG ulNonceLen; +- CK_BYTE_PTR pAAD; +- CK_ULONG ulAADLen; +-} CK_SALSA20_CHACHA20_POLY1305_PARAMS; +- +-typedef CK_SALSA20_CHACHA20_POLY1305_PARAMS \ +- CK_PTR CK_SALSA20_CHACHA20_POLY1305_PARAMS_PTR; +- +-typedef struct CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS { +- CK_BYTE_PTR pNonce; +- CK_ULONG ulNonceLen; +- CK_BYTE_PTR pTag; +-} CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS; +- +-typedef CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS \ +- CK_PTR CK_SALSA20_CHACHA20_POLY1305_MSG_PARAMS_PTR; ++typedef struct CK_XEDDSA_PARAMS { ++ CK_XEDDSA_HASH_TYPE hash; ++} CK_XEDDSA_PARAMS; ++typedef CK_XEDDSA_PARAMS CK_PTR CK_XEDDSA_PARAMS_PTR; + ++/* X3DH and Ratchet are new in v3.0 */ + typedef CK_ULONG CK_X3DH_KDF_TYPE; + typedef CK_X3DH_KDF_TYPE CK_PTR CK_X3DH_KDF_TYPE_PTR; + +-/* X3dh, ratchet */ + typedef struct CK_X3DH_INITIATE_PARAMS { + CK_X3DH_KDF_TYPE kdf; + CK_OBJECT_HANDLE pPeer_identity; + CK_OBJECT_HANDLE pPeer_prekey; +- CK_BYTE_PTR pPrekey_signature; +- CK_BYTE_PTR pOnetime_key; ++ CK_BYTE_PTR pPrekey_signature; ++ CK_BYTE_PTR pOnetime_key; + CK_OBJECT_HANDLE pOwn_identity; + CK_OBJECT_HANDLE pOwn_ephemeral; + } CK_X3DH_INITIATE_PARAMS; + + typedef struct CK_X3DH_RESPOND_PARAMS { + CK_X3DH_KDF_TYPE kdf; +- CK_BYTE_PTR pIdentity_id; +- CK_BYTE_PTR pPrekey_id; +- CK_BYTE_PTR pOnetime_id; ++ CK_BYTE_PTR pIdentity_id; ++ CK_BYTE_PTR pPrekey_id; ++ CK_BYTE_PTR pOnetime_id; + CK_OBJECT_HANDLE pInitiator_identity; +- CK_BYTE_PTR pInitiator_ephemeral; ++ CK_BYTE_PTR pInitiator_ephemeral; + } CK_X3DH_RESPOND_PARAMS; + + typedef CK_ULONG CK_X2RATCHET_KDF_TYPE; + typedef CK_X2RATCHET_KDF_TYPE CK_PTR CK_X2RATCHET_KDF_TYPE_PTR; + + typedef struct CK_X2RATCHET_INITIALIZE_PARAMS { +- CK_BYTE_PTR sk; +- CK_OBJECT_HANDLE peer_public_prekey; +- CK_OBJECT_HANDLE peer_public_identity; +- CK_OBJECT_HANDLE own_public_identity; +- CK_BBOOL bEncryptedHeader; +- CK_ULONG eCurve; +- CK_MECHANISM_TYPE aeadMechanism; ++ CK_BYTE_PTR sk; ++ CK_OBJECT_HANDLE peer_public_prekey; ++ CK_OBJECT_HANDLE peer_public_identity; ++ CK_OBJECT_HANDLE own_public_identity; ++ CK_BBOOL bEncryptedHeader; ++ CK_ULONG eCurve; ++ CK_MECHANISM_TYPE aeadMechanism; + CK_X2RATCHET_KDF_TYPE kdfMechanism; + } CK_X2RATCHET_INITIALIZE_PARAMS; + +-typedef CK_X2RATCHET_INITIALIZE_PARAMS \ +- CK_PTR CK_X2RATCHET_INITIALIZE_PARAMS_PTR; ++typedef CK_X2RATCHET_INITIALIZE_PARAMS ++ CK_PTR CK_X2RATCHET_INITIALIZE_PARAMS_PTR; + + typedef struct CK_X2RATCHET_RESPOND_PARAMS { +- CK_BYTE_PTR sk; +- CK_OBJECT_HANDLE own_prekey; +- CK_OBJECT_HANDLE initiator_identity; +- CK_OBJECT_HANDLE own_public_identity; +- CK_BBOOL bEncryptedHeader; +- CK_ULONG eCurve; +- CK_MECHANISM_TYPE aeadMechanism; ++ CK_BYTE_PTR sk; ++ CK_OBJECT_HANDLE own_prekey; ++ CK_OBJECT_HANDLE initiator_identity; ++ CK_OBJECT_HANDLE own_public_identity; ++ CK_BBOOL bEncryptedHeader; ++ CK_ULONG eCurve; ++ CK_MECHANISM_TYPE aeadMechanism; + CK_X2RATCHET_KDF_TYPE kdfMechanism; + } CK_X2RATCHET_RESPOND_PARAMS; +-typedef CK_X2RATCHET_RESPOND_PARAMS \ +- CK_PTR CK_X2RATCHET_RESPOND_PARAMS_PTR; ++typedef CK_X2RATCHET_RESPOND_PARAMS ++ CK_PTR CK_X2RATCHET_RESPOND_PARAMS_PTR; + +-typedef CK_ULONG CK_XEDDSA_HASH_TYPE; +-typedef CK_XEDDSA_HASH_TYPE CK_PTR CK_XEDDSA_HASH_TYPE_PTR; ++/* NSS Specific defines */ ++/* stuff that for historic reasons is in this header file but should have ++ * been in pkcs11n.h */ ++#define CKK_INVALID_KEY_TYPE 0xffffffffUL + +-/* XEDDSA */ +-typedef struct CK_XEDDSA_PARAMS { +- CK_XEDDSA_HASH_TYPE hash; +-} CK_XEDDSA_PARAMS; +-typedef CK_XEDDSA_PARAMS CK_PTR CK_XEDDSA_PARAMS_PTR; ++#include "pkcs11n.h" + +-typedef struct CK_HKDF_PARAMS { +- CK_BBOOL bExtract; +- CK_BBOOL bExpand; +- CK_MECHANISM_TYPE prfHashMechanism; +- CK_ULONG ulSaltType; +- CK_BYTE_PTR pSalt; +- CK_ULONG ulSaltLen; +- CK_OBJECT_HANDLE hSaltKey; +- CK_BYTE_PTR pInfo; +- CK_ULONG ulInfoLen; +-} CK_HKDF_PARAMS; +-typedef CK_HKDF_PARAMS CK_PTR CK_HKDF_PARAMS_PTR; +- +-#define CKF_HKDF_SALT_NULL 0x00000001UL +-#define CKF_HKDF_SALT_DATA 0x00000002UL +-#define CKF_HKDF_SALT_KEY 0x00000004UL +- +-#endif /* _PKCS11T_H_ */ ++/* undo packing */ ++#include "pkcs11u.h" + ++#endif +--- /dev/null ++++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11u.h +@@ -0,0 +1,22 @@ ++/* This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ ++/* ++ * Copyright (C) 1994-1999 RSA Security Inc. Licence to copy this document ++ * is granted provided that it is identified as "RSA Security Inc. Public-Key ++ * Cryptography Standards (PKCS)" in all material mentioning or referencing ++ * this document. ++ */ ++/* ++ * reset any packing set by pkcs11p.h ++ */ ++ ++#if defined(_WIN32) || defined(_WINDOWS) ++#ifdef __clang__ ++#pragma clang diagnostic ignored "-Wpragma-pack" ++#endif ++#ifdef _MSC_VER ++#pragma warning(disable : 4103) ++#endif ++#pragma pack(pop, cryptoki) ++#endif +--- /dev/null ++++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/prcpucfg.h +@@ -0,0 +1,1319 @@ ++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ ++ ++/* ++ * This file is used by not only Linux but also other glibc systems ++ * such as GNU/Hurd and GNU/k*BSD. ++ */ ++ ++#ifndef nspr_cpucfg___ ++#define nspr_cpucfg___ ++ ++#ifndef XP_UNIX ++#define XP_UNIX ++#endif ++ ++#if !defined(LINUX) && defined(__linux__) ++#define LINUX ++#endif ++ ++#ifdef __FreeBSD_kernel__ ++#define PR_AF_INET6 28 /* same as AF_INET6 */ ++#elif defined(__GNU__) ++#define PR_AF_INET6 26 /* same as AF_INET6 */ ++#else ++#define PR_AF_INET6 10 /* same as AF_INET6 */ ++#endif ++ ++#ifdef __powerpc64__ ++ ++#ifdef __LITTLE_ENDIAN__ ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++#else ++#undef IS_LITTLE_ENDIAN ++#define IS_BIG_ENDIAN 1 ++#endif ++#define IS_64 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 8 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 8 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 64 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 64 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 6 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 6 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 8 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 8 ++#define PR_ALIGN_OF_WORD 8 ++ ++#define PR_BYTES_PER_WORD_LOG2 3 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__powerpc__) ++ ++#ifdef __LITTLE_ENDIAN__ ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++#else ++#undef IS_LITTLE_ENDIAN ++#define IS_BIG_ENDIAN 1 ++#endif ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__alpha) ++ ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++#define IS_64 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 8 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 8 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 64 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 64 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 6 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 6 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 8 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 8 ++#define PR_ALIGN_OF_WORD 8 ++ ++#define PR_BYTES_PER_WORD_LOG2 3 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__ia64__) ++ ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++#define IS_64 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 8 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 8 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 64 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 64 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 6 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 6 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 8 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 8 ++#define PR_ALIGN_OF_WORD 8 ++ ++#define PR_BYTES_PER_WORD_LOG2 3 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__x86_64__) ++ ++#ifdef __ILP32__ ++ ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#else ++ ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++#define IS_64 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 8 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 8 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 64 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 64 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 6 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 6 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 8 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 8 ++#define PR_ALIGN_OF_WORD 8 ++ ++#define PR_BYTES_PER_WORD_LOG2 3 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#endif ++ ++#elif defined(__mc68000__) ++ ++#undef IS_LITTLE_ENDIAN ++#define IS_BIG_ENDIAN 1 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 2 ++#define PR_ALIGN_OF_LONG 2 ++#define PR_ALIGN_OF_INT64 2 ++#define PR_ALIGN_OF_FLOAT 2 ++#define PR_ALIGN_OF_DOUBLE 2 ++#define PR_ALIGN_OF_POINTER 2 ++#define PR_ALIGN_OF_WORD 2 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__sparc__) && defined (__arch64__) ++ ++#undef IS_LITTLE_ENDIAN ++#define IS_BIG_ENDIAN 1 ++#define IS_64 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 8 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 8 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 64 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 64 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 6 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 6 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_LONG 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 8 ++#define PR_ALIGN_OF_WORD 8 ++ ++#define PR_BYTES_PER_WORD_LOG2 3 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__sparc__) ++ ++#undef IS_LITTLE_ENDIAN ++#define IS_BIG_ENDIAN 1 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__i386__) ++ ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 4 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 4 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__mips__) ++ ++/* For _ABI64 */ ++#include <sgidefs.h> ++ ++#ifdef __MIPSEB__ ++#define IS_BIG_ENDIAN 1 ++#undef IS_LITTLE_ENDIAN ++#elif defined(__MIPSEL__) ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++#else ++#error "Unknown MIPS endianness." ++#endif ++ ++#if _MIPS_SIM == _ABI64 ++ ++#define IS_64 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 8 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 8 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 64 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 64 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 6 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 6 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 8 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 8 ++#define PR_ALIGN_OF_WORD 8 ++ ++#define PR_BYTES_PER_WORD_LOG2 3 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#else /* _ABI64 */ ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#endif /* _ABI64 */ ++ ++#elif defined(__arm__) ++ ++#ifdef __ARMEB__ ++#undef IS_LITTLE_ENDIAN ++#define IS_BIG_ENDIAN 1 ++#elif defined(__ARMEL__) ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++#else ++#error "Unknown ARM endianness." ++#endif ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 4 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 4 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__aarch64__) ++ ++#ifdef __AARCH64EB__ ++#undef IS_LITTLE_ENDIAN ++#define IS_BIG_ENDIAN 1 ++#elif defined(__AARCH64EL__) ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++#else ++#error "Unknown Aarch64 endianness." ++#endif ++#define IS_64 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 8 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 8 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 64 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 64 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 6 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 6 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 8 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 8 ++#define PR_ALIGN_OF_WORD 8 ++ ++#define PR_BYTES_PER_WORD_LOG2 3 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__hppa__) ++ ++#undef IS_LITTLE_ENDIAN ++#define IS_BIG_ENDIAN 1 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__s390x__) ++ ++#define IS_BIG_ENDIAN 1 ++#undef IS_LITTLE_ENDIAN ++#define IS_64 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 8 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 8 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 64 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 64 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 6 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 6 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 8 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 8 ++#define PR_ALIGN_OF_WORD 8 ++ ++#define PR_BYTES_PER_WORD_LOG2 3 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__s390__) ++ ++#define IS_BIG_ENDIAN 1 ++#undef IS_LITTLE_ENDIAN ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 4 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 4 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__sh__) ++ ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 4 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 4 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__avr32__) ++ ++#undef IS_LITTLE_ENDIAN ++#define IS_BIG_ENDIAN 1 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 4 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 4 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__m32r__) ++ ++#undef IS_LITTLE_ENDIAN ++#define IS_BIG_ENDIAN 1 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 4 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 4 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__or1k__) ++ ++#undef IS_LITTLE_ENDIAN ++#define IS_BIG_ENDIAN 1 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 4 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 4 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__riscv) && (__riscv_xlen == 32) ++ ++#undef IS_BIG_ENDIAN ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_64 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__riscv) && (__riscv_xlen == 64) ++ ++#undef IS_BIG_ENDIAN ++#define IS_LITTLE_ENDIAN 1 ++#define IS_64 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 8 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 8 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 64 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 64 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 6 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 6 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 8 ++#define PR_ALIGN_OF_INT64 8 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 8 ++#define PR_ALIGN_OF_WORD 8 ++ ++#define PR_BYTES_PER_WORD_LOG2 3 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__arc__) ++ ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 4 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 4 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__nios2__) || defined(__microblaze__) || defined(__nds32__) || \ ++ defined(__xtensa__) ++ ++#if defined(__microblaze__) && defined(__BIG_ENDIAN__) ++#define IS_BIG_ENDIAN 1 ++#undef IS_LITTLE_ENDIAN ++#else ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++#endif ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 8 ++#define PR_BYTES_PER_LONG 4 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 4 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 64 ++#define PR_BITS_PER_LONG 32 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 32 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 6 ++#define PR_BITS_PER_LONG_LOG2 5 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 5 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 4 ++#define PR_ALIGN_OF_INT64 4 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 4 ++#define PR_ALIGN_OF_POINTER 4 ++#define PR_ALIGN_OF_WORD 4 ++ ++#define PR_BYTES_PER_WORD_LOG2 2 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#elif defined(__e2k__) ++ ++#define IS_LITTLE_ENDIAN 1 ++#undef IS_BIG_ENDIAN ++ ++#define IS_64 ++ ++#define PR_BYTES_PER_BYTE 1 ++#define PR_BYTES_PER_SHORT 2 ++#define PR_BYTES_PER_INT 4 ++#define PR_BYTES_PER_INT64 4 ++#define PR_BYTES_PER_LONG 8 ++#define PR_BYTES_PER_FLOAT 4 ++#define PR_BYTES_PER_DOUBLE 8 ++#define PR_BYTES_PER_WORD 8 ++#define PR_BYTES_PER_DWORD 8 ++ ++#define PR_BITS_PER_BYTE 8 ++#define PR_BITS_PER_SHORT 16 ++#define PR_BITS_PER_INT 32 ++#define PR_BITS_PER_INT64 32 ++#define PR_BITS_PER_LONG 64 ++#define PR_BITS_PER_FLOAT 32 ++#define PR_BITS_PER_DOUBLE 64 ++#define PR_BITS_PER_WORD 64 ++ ++#define PR_BITS_PER_BYTE_LOG2 3 ++#define PR_BITS_PER_SHORT_LOG2 4 ++#define PR_BITS_PER_INT_LOG2 5 ++#define PR_BITS_PER_INT64_LOG2 5 ++#define PR_BITS_PER_LONG_LOG2 6 ++#define PR_BITS_PER_FLOAT_LOG2 5 ++#define PR_BITS_PER_DOUBLE_LOG2 6 ++#define PR_BITS_PER_WORD_LOG2 6 ++ ++#define PR_ALIGN_OF_SHORT 2 ++#define PR_ALIGN_OF_INT 4 ++#define PR_ALIGN_OF_LONG 8 ++#define PR_ALIGN_OF_INT64 4 ++#define PR_ALIGN_OF_FLOAT 4 ++#define PR_ALIGN_OF_DOUBLE 8 ++#define PR_ALIGN_OF_POINTER 8 ++#define PR_ALIGN_OF_WORD 8 ++ ++#define PR_BYTES_PER_WORD_LOG2 3 ++#define PR_BYTES_PER_DWORD_LOG2 3 ++ ++#else ++ ++#error "Unknown CPU architecture" ++ ++#endif ++ ++#ifndef HAVE_LONG_LONG ++#define HAVE_LONG_LONG ++#endif ++#if PR_ALIGN_OF_DOUBLE == 8 ++#define HAVE_ALIGNED_DOUBLES ++#endif ++#if PR_ALIGN_OF_INT64 == 8 ++#define HAVE_ALIGNED_LONGLONGS ++#endif ++ ++#ifndef NO_NSPR_10_SUPPORT ++ ++#define BYTES_PER_BYTE PR_BYTES_PER_BYTE ++#define BYTES_PER_SHORT PR_BYTES_PER_SHORT ++#define BYTES_PER_INT PR_BYTES_PER_INT ++#define BYTES_PER_INT64 PR_BYTES_PER_INT64 ++#define BYTES_PER_LONG PR_BYTES_PER_LONG ++#define BYTES_PER_FLOAT PR_BYTES_PER_FLOAT ++#define BYTES_PER_DOUBLE PR_BYTES_PER_DOUBLE ++#define BYTES_PER_WORD PR_BYTES_PER_WORD ++#define BYTES_PER_DWORD PR_BYTES_PER_DWORD ++ ++#define BITS_PER_BYTE PR_BITS_PER_BYTE ++#define BITS_PER_SHORT PR_BITS_PER_SHORT ++#define BITS_PER_INT PR_BITS_PER_INT ++#define BITS_PER_INT64 PR_BITS_PER_INT64 ++#define BITS_PER_LONG PR_BITS_PER_LONG ++#define BITS_PER_FLOAT PR_BITS_PER_FLOAT ++#define BITS_PER_DOUBLE PR_BITS_PER_DOUBLE ++#define BITS_PER_WORD PR_BITS_PER_WORD ++ ++#define BITS_PER_BYTE_LOG2 PR_BITS_PER_BYTE_LOG2 ++#define BITS_PER_SHORT_LOG2 PR_BITS_PER_SHORT_LOG2 ++#define BITS_PER_INT_LOG2 PR_BITS_PER_INT_LOG2 ++#define BITS_PER_INT64_LOG2 PR_BITS_PER_INT64_LOG2 ++#define BITS_PER_LONG_LOG2 PR_BITS_PER_LONG_LOG2 ++#define BITS_PER_FLOAT_LOG2 PR_BITS_PER_FLOAT_LOG2 ++#define BITS_PER_DOUBLE_LOG2 PR_BITS_PER_DOUBLE_LOG2 ++#define BITS_PER_WORD_LOG2 PR_BITS_PER_WORD_LOG2 ++ ++#define ALIGN_OF_SHORT PR_ALIGN_OF_SHORT ++#define ALIGN_OF_INT PR_ALIGN_OF_INT ++#define ALIGN_OF_LONG PR_ALIGN_OF_LONG ++#define ALIGN_OF_INT64 PR_ALIGN_OF_INT64 ++#define ALIGN_OF_FLOAT PR_ALIGN_OF_FLOAT ++#define ALIGN_OF_DOUBLE PR_ALIGN_OF_DOUBLE ++#define ALIGN_OF_POINTER PR_ALIGN_OF_POINTER ++#define ALIGN_OF_WORD PR_ALIGN_OF_WORD ++ ++#define BYTES_PER_WORD_LOG2 PR_BYTES_PER_WORD_LOG2 ++#define BYTES_PER_DWORD_LOG2 PR_BYTES_PER_DWORD_LOG2 ++#define WORDS_PER_DWORD_LOG2 PR_WORDS_PER_DWORD_LOG2 ++ ++#endif /* NO_NSPR_10_SUPPORT */ ++ ++#endif /* nspr_cpucfg___ */ +--- /dev/null ++++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/prtypes.h +@@ -0,0 +1,520 @@ ++/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ ++ ++/* ++** File: prtypes.h ++** Description: Definitions of NSPR's basic types ++** ++** Prototypes and macros used to make up for deficiencies that we have found ++** in ANSI environments. ++** ++** Since we do not wrap <stdlib.h> and all the other standard headers, authors ++** of portable code will not know in general that they need these definitions. ++** Instead of requiring these authors to find the dependent uses in their code ++** and take the following steps only in those C files, we take steps once here ++** for all C files. ++**/ ++ ++#ifndef prtypes_h___ ++#define prtypes_h___ ++ ++#ifdef MDCPUCFG ++#include MDCPUCFG ++#else ++#include "prcpucfg.h" ++#endif ++ ++#include <stddef.h> ++ ++/*********************************************************************** ++** MACROS: PR_EXTERN ++** PR_IMPLEMENT ++** DESCRIPTION: ++** These are only for externally visible routines and globals. For ++** internal routines, just use "extern" for type checking and that ++** will not export internal cross-file or forward-declared symbols. ++** Define a macro for declaring procedures return types. We use this to ++** deal with windoze specific type hackery for DLL definitions. Use ++** PR_EXTERN when the prototype for the method is declared. Use ++** PR_IMPLEMENT for the implementation of the method. ++** ++** Example: ++** in dowhim.h ++** PR_EXTERN( void ) DoWhatIMean( void ); ++** in dowhim.c ++** PR_IMPLEMENT( void ) DoWhatIMean( void ) { return; } ++** ++** ++***********************************************************************/ ++#if defined(WIN32) ++ ++#define PR_EXPORT(__type) extern __declspec(dllexport) __type ++#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type ++#define PR_IMPORT(__type) __declspec(dllimport) __type ++#define PR_IMPORT_DATA(__type) __declspec(dllimport) __type ++ ++#define PR_EXTERN(__type) extern __declspec(dllexport) __type ++#define PR_IMPLEMENT(__type) __declspec(dllexport) __type ++#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type ++#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type ++ ++#define PR_CALLBACK ++#define PR_CALLBACK_DECL ++#define PR_STATIC_CALLBACK(__x) static __x ++ ++#elif defined(XP_OS2) && defined(__declspec) ++ ++#define PR_EXPORT(__type) extern __declspec(dllexport) __type ++#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type ++#define PR_IMPORT(__type) extern __declspec(dllimport) __type ++#define PR_IMPORT_DATA(__type) extern __declspec(dllimport) __type ++ ++#define PR_EXTERN(__type) extern __declspec(dllexport) __type ++#define PR_IMPLEMENT(__type) __declspec(dllexport) __type ++#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type ++#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type ++ ++#define PR_CALLBACK ++#define PR_CALLBACK_DECL ++#define PR_STATIC_CALLBACK(__x) static __x ++ ++#else /* Unix */ ++ ++/* GCC 3.3 and later support the visibility attribute. */ ++#if (__GNUC__ >= 4) || \ ++ (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) ++#define PR_VISIBILITY_DEFAULT __attribute__((visibility("default"))) ++#else ++#define PR_VISIBILITY_DEFAULT ++#endif ++ ++#define PR_EXPORT(__type) extern PR_VISIBILITY_DEFAULT __type ++#define PR_EXPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type ++#define PR_IMPORT(__type) extern PR_VISIBILITY_DEFAULT __type ++#define PR_IMPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type ++ ++#define PR_EXTERN(__type) extern PR_VISIBILITY_DEFAULT __type ++#define PR_IMPLEMENT(__type) PR_VISIBILITY_DEFAULT __type ++#define PR_EXTERN_DATA(__type) extern PR_VISIBILITY_DEFAULT __type ++#define PR_IMPLEMENT_DATA(__type) PR_VISIBILITY_DEFAULT __type ++#define PR_CALLBACK ++#define PR_CALLBACK_DECL ++#define PR_STATIC_CALLBACK(__x) static __x ++ ++#endif ++ ++#if defined(_NSPR_BUILD_) ++#define NSPR_API(__type) PR_EXPORT(__type) ++#define NSPR_DATA_API(__type) PR_EXPORT_DATA(__type) ++#else ++#define NSPR_API(__type) PR_IMPORT(__type) ++#define NSPR_DATA_API(__type) PR_IMPORT_DATA(__type) ++#endif ++ ++/*********************************************************************** ++** MACROS: PR_BEGIN_MACRO ++** PR_END_MACRO ++** DESCRIPTION: ++** Macro body brackets so that macros with compound statement definitions ++** behave syntactically more like functions when called. ++***********************************************************************/ ++#define PR_BEGIN_MACRO do { ++#define PR_END_MACRO } while (0) ++ ++/*********************************************************************** ++** MACROS: PR_BEGIN_EXTERN_C ++** PR_END_EXTERN_C ++** DESCRIPTION: ++** Macro shorthands for conditional C++ extern block delimiters. ++***********************************************************************/ ++#ifdef __cplusplus ++#define PR_BEGIN_EXTERN_C extern "C" { ++#define PR_END_EXTERN_C } ++#else ++#define PR_BEGIN_EXTERN_C ++#define PR_END_EXTERN_C ++#endif ++ ++/*********************************************************************** ++** MACROS: PR_BIT ++** PR_BITMASK ++** DESCRIPTION: ++** Bit masking macros. XXX n must be <= 31 to be portable ++***********************************************************************/ ++#define PR_BIT(n) ((PRUint32)1 << (n)) ++#define PR_BITMASK(n) (PR_BIT(n) - 1) ++ ++/*********************************************************************** ++** MACROS: PR_ROUNDUP ++** PR_MIN ++** PR_MAX ++** PR_ABS ++** DESCRIPTION: ++** Commonly used macros for operations on compatible types. ++***********************************************************************/ ++#define PR_ROUNDUP(x,y) ((((x)+((y)-1))/(y))*(y)) ++#define PR_MIN(x,y) ((x)<(y)?(x):(y)) ++#define PR_MAX(x,y) ((x)>(y)?(x):(y)) ++#define PR_ABS(x) ((x)<0?-(x):(x)) ++ ++/*********************************************************************** ++** MACROS: PR_ARRAY_SIZE ++** DESCRIPTION: ++** The number of elements in an array. ++***********************************************************************/ ++#define PR_ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0])) ++ ++PR_BEGIN_EXTERN_C ++ ++/* ++** Starting in NSPR 4.9.5, NSPR's exact-width integer types should match ++** the exact-width integer types defined in <stdint.h>. This allows sloppy ++** code to use PRInt{N} and int{N}_t interchangeably. ++** ++** The 8-bit and 16-bit integer types can only be defined using char and ++** short. All platforms define the 32-bit integer types using int. So only ++** the 64-bit integer types could be defined differently. ++** ++** NSPR's original strategy was to use the "shortest" 64-bit integer type: ++** if long is 64-bit, then prefer it over long long. This strategy is also ++** used by Linux/glibc, FreeBSD, and NetBSD. ++** ++** Other platforms use a different strategy: simply define the 64-bit ++** integer types using long long. We define the PR_ALTERNATE_INT64_TYPEDEF ++** macro on these platforms. Note that PR_ALTERNATE_INT64_TYPEDEF is for ++** internal use by NSPR headers only. Do not define or test this macro in ++** your code. ++** ++** NOTE: NSPR can't use <stdint.h> because C99 requires C++ code to define ++** __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS to make all the macros ++** defined in <stdint.h> available. This strange requirement is gone in ++** C11. When most platforms ignore this C99 requirement, NSPR will be able ++** to use <stdint.h>. A patch to do that is in NSPR bug 634793. ++*/ ++ ++#if defined(__APPLE__) || defined(__OpenBSD__) ++#define PR_ALTERNATE_INT64_TYPEDEF ++#endif ++ ++/************************************************************************ ++** TYPES: PRUint8 ++** PRInt8 ++** DESCRIPTION: ++** The int8 types are known to be 8 bits each. There is no type that ++** is equivalent to a plain "char". ++************************************************************************/ ++#if PR_BYTES_PER_BYTE == 1 ++typedef unsigned char PRUint8; ++/* ++** There are two scenarios that require us to define PRInt8 as type 'char'. ++** (1) ++** Some cfront-based C++ compilers do not like 'signed char' and ++** issue the warning message: ++** warning: "signed" not implemented (ignored) ++** For these compilers, we have to define PRInt8 as plain 'char'. ++** Make sure that plain 'char' is indeed signed under these compilers. ++** (2) ++** Mozilla C++ code expects the PRInt{N} and int{N}_t types to match (see bug ++** 634793). If a platform defines int8_t as 'char', but NSPR defines it as ++** 'signed char', it results in a type mismatch. ++** On such platforms we define PRInt8 as 'char' to avoid the mismatch. ++*/ ++#if (defined(HPUX) && defined(__cplusplus) /* reason 1*/ \ ++ && !defined(__GNUC__) && __cplusplus < 199707L) \ ++ || (defined(SCO) && defined(__cplusplus) /* reason 1 */ \ ++ && !defined(__GNUC__) && __cplusplus == 1L) \ ++ || (defined(__sun) && defined(__cplusplus)) /* reason 2 */ ++typedef char PRInt8; ++#else ++typedef signed char PRInt8; ++#endif ++#else ++#error No suitable type for PRInt8/PRUint8 ++#endif ++ ++/************************************************************************ ++ * MACROS: PR_INT8_MAX ++ * PR_INT8_MIN ++ * PR_UINT8_MAX ++ * DESCRIPTION: ++ * The maximum and minimum values of a PRInt8 or PRUint8. ++************************************************************************/ ++ ++#define PR_INT8_MAX 127 ++#define PR_INT8_MIN (-128) ++#define PR_UINT8_MAX 255U ++ ++/************************************************************************ ++** TYPES: PRUint16 ++** PRInt16 ++** DESCRIPTION: ++** The int16 types are known to be 16 bits each. ++************************************************************************/ ++#if PR_BYTES_PER_SHORT == 2 ++typedef unsigned short PRUint16; ++typedef short PRInt16; ++#else ++#error No suitable type for PRInt16/PRUint16 ++#endif ++ ++/************************************************************************ ++ * MACROS: PR_INT16_MAX ++ * PR_INT16_MIN ++ * PR_UINT16_MAX ++ * DESCRIPTION: ++ * The maximum and minimum values of a PRInt16 or PRUint16. ++************************************************************************/ ++ ++#define PR_INT16_MAX 32767 ++#define PR_INT16_MIN (-32768) ++#define PR_UINT16_MAX 65535U ++ ++/************************************************************************ ++** TYPES: PRUint32 ++** PRInt32 ++** DESCRIPTION: ++** The int32 types are known to be 32 bits each. ++************************************************************************/ ++#if PR_BYTES_PER_INT == 4 ++typedef unsigned int PRUint32; ++typedef int PRInt32; ++#define PR_INT32(x) x ++#define PR_UINT32(x) x ## U ++#elif PR_BYTES_PER_LONG == 4 ++typedef unsigned long PRUint32; ++typedef long PRInt32; ++#define PR_INT32(x) x ## L ++#define PR_UINT32(x) x ## UL ++#else ++#error No suitable type for PRInt32/PRUint32 ++#endif ++ ++/************************************************************************ ++ * MACROS: PR_INT32_MAX ++ * PR_INT32_MIN ++ * PR_UINT32_MAX ++ * DESCRIPTION: ++ * The maximum and minimum values of a PRInt32 or PRUint32. ++************************************************************************/ ++ ++#define PR_INT32_MAX PR_INT32(2147483647) ++#define PR_INT32_MIN (-PR_INT32_MAX - 1) ++#define PR_UINT32_MAX PR_UINT32(4294967295) ++ ++/************************************************************************ ++** TYPES: PRUint64 ++** PRInt64 ++** DESCRIPTION: ++** The int64 types are known to be 64 bits each. Care must be used when ++** declaring variables of type PRUint64 or PRInt64. Different hardware ++** architectures and even different compilers have varying support for ++** 64 bit values. The only guaranteed portability requires the use of ++** the LL_ macros (see prlong.h). ++** ++** MACROS: PR_INT64 ++** PR_UINT64 ++** DESCRIPTION: ++** The PR_INT64 and PR_UINT64 macros provide a portable way for ++** specifying 64-bit integer constants. They can only be used if ++** PRInt64 and PRUint64 are defined as compiler-supported 64-bit ++** integer types (i.e., if HAVE_LONG_LONG is defined, which is true ++** for all the supported compilers topday). If PRInt64 and PRUint64 ++** are defined as structs, the LL_INIT macro defined in prlong.h has ++** to be used. ++** ++** MACROS: PR_INT64_MAX ++** PR_INT64_MIN ++** PR_UINT64_MAX ++** DESCRIPTION: ++** The maximum and minimum values of a PRInt64 or PRUint64. ++************************************************************************/ ++#ifdef HAVE_LONG_LONG ++/* Keep this in sync with prlong.h. */ ++#if PR_BYTES_PER_LONG == 8 && !defined(PR_ALTERNATE_INT64_TYPEDEF) ++typedef long PRInt64; ++typedef unsigned long PRUint64; ++#define PR_INT64(x) x ## L ++#define PR_UINT64(x) x ## UL ++#elif defined(WIN32) && !defined(__GNUC__) ++typedef __int64 PRInt64; ++typedef unsigned __int64 PRUint64; ++#define PR_INT64(x) x ## i64 ++#define PR_UINT64(x) x ## ui64 ++#else ++typedef long long PRInt64; ++typedef unsigned long long PRUint64; ++#define PR_INT64(x) x ## LL ++#define PR_UINT64(x) x ## ULL ++#endif /* PR_BYTES_PER_LONG == 8 */ ++ ++#define PR_INT64_MAX PR_INT64(0x7fffffffffffffff) ++#define PR_INT64_MIN (-PR_INT64_MAX - 1) ++#define PR_UINT64_MAX PR_UINT64(-1) ++#else /* !HAVE_LONG_LONG */ ++typedef struct { ++#ifdef IS_LITTLE_ENDIAN ++ PRUint32 lo, hi; ++#else ++ PRUint32 hi, lo; ++#endif ++} PRInt64; ++typedef PRInt64 PRUint64; ++ ++#define PR_INT64_MAX (PRInt64){0x7fffffff, 0xffffffff} ++#define PR_INT64_MIN (PRInt64){0xffffffff, 0xffffffff} ++#define PR_UINT64_MAX (PRUint64){0xffffffff, 0xffffffff} ++ ++#endif /* !HAVE_LONG_LONG */ ++ ++/************************************************************************ ++** TYPES: PRUintn ++** PRIntn ++** DESCRIPTION: ++** The PRIntn types are most appropriate for automatic variables. They are ++** guaranteed to be at least 16 bits, though various architectures may ++** define them to be wider (e.g., 32 or even 64 bits). These types are ++** never valid for fields of a structure. ++************************************************************************/ ++#if PR_BYTES_PER_INT >= 2 ++typedef int PRIntn; ++typedef unsigned int PRUintn; ++#else ++#error 'sizeof(int)' not sufficient for platform use ++#endif ++ ++/************************************************************************ ++** TYPES: PRFloat64 ++** DESCRIPTION: ++** NSPR's floating point type is always 64 bits. ++************************************************************************/ ++typedef double PRFloat64; ++ ++/************************************************************************ ++** TYPES: PRSize ++** DESCRIPTION: ++** A type for representing the size of objects. ++************************************************************************/ ++typedef size_t PRSize; ++ ++ ++/************************************************************************ ++** TYPES: PROffset32, PROffset64 ++** DESCRIPTION: ++** A type for representing byte offsets from some location. ++************************************************************************/ ++typedef PRInt32 PROffset32; ++typedef PRInt64 PROffset64; ++ ++/************************************************************************ ++** TYPES: PRPtrDiff ++** DESCRIPTION: ++** A type for pointer difference. Variables of this type are suitable ++** for storing a pointer or pointer subtraction. ++************************************************************************/ ++typedef ptrdiff_t PRPtrdiff; ++ ++/************************************************************************ ++** TYPES: PRUptrdiff ++** DESCRIPTION: ++** A type for pointer difference. Variables of this type are suitable ++** for storing a pointer or pointer sutraction. ++************************************************************************/ ++#ifdef _WIN64 ++typedef PRUint64 PRUptrdiff; ++#else ++typedef unsigned long PRUptrdiff; ++#endif ++ ++/************************************************************************ ++** TYPES: PRBool ++** DESCRIPTION: ++** Use PRBool for variables and parameter types. Use PR_FALSE and PR_TRUE ++** for clarity of target type in assignments and actual arguments. Use ++** 'if (bool)', 'while (!bool)', '(bool) ? x : y' etc., to test booleans ++** just as you would C int-valued conditions. ++************************************************************************/ ++typedef PRIntn PRBool; ++#define PR_TRUE 1 ++#define PR_FALSE 0 ++ ++/************************************************************************ ++** TYPES: PRPackedBool ++** DESCRIPTION: ++** Use PRPackedBool within structs where bitfields are not desirable ++** but minimum and consistant overhead matters. ++************************************************************************/ ++typedef PRUint8 PRPackedBool; ++ ++/* ++** Status code used by some routines that have a single point of failure or ++** special status return. ++*/ ++typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus; ++ ++#ifndef __PRUNICHAR__ ++#define __PRUNICHAR__ ++#ifdef WIN32 ++typedef wchar_t PRUnichar; ++#else ++typedef PRUint16 PRUnichar; ++#endif ++#endif ++ ++/* ++** WARNING: The undocumented data types PRWord and PRUword are ++** only used in the garbage collection and arena code. Do not ++** use PRWord and PRUword in new code. ++** ++** A PRWord is an integer that is the same size as a void*. ++** It implements the notion of a "word" in the Java Virtual ++** Machine. (See Sec. 3.4 "Words", The Java Virtual Machine ++** Specification, Addison-Wesley, September 1996. ++** http://java.sun.com/docs/books/vmspec/index.html.) ++*/ ++#ifdef _WIN64 ++typedef PRInt64 PRWord; ++typedef PRUint64 PRUword; ++#else ++typedef long PRWord; ++typedef unsigned long PRUword; ++#endif ++ ++/* ++ * PR_PRETEND_NORETURN, specified at the end of a function declaration, ++ * indicates that for the purposes of static analysis, this function does not ++ * return. (The function definition does not need to be annotated.) ++ * ++ * void PR_Assert(const char *s, const char *file, PRIntn ln) ++ * PR_PRETEND_NORETURN; ++ * ++ * Some static analyzers, like scan-build from clang, can use this information ++ * to eliminate false positives. From the upstream documentation of ++ * scan-build: ++ * This attribute is useful for annotating assertion handlers that actually ++ * can return, but for the purpose of using the analyzer we want to pretend ++ * that such functions do not return. ++ */ ++#ifdef __clang_analyzer__ ++#if __has_extension(attribute_analyzer_noreturn) ++#define PR_PRETEND_NORETURN __attribute__((analyzer_noreturn)) ++#endif ++#endif ++ ++#ifndef PR_PRETEND_NORETURN ++#define PR_PRETEND_NORETURN /* no support */ ++#endif ++ ++/* ++** Compile-time assert. "condition" must be a constant expression. ++** The macro can be used only in places where an "extern" declaration is ++** allowed. ++*/ ++#define PR_STATIC_ASSERT(condition) \ ++ extern void pr_static_assert(int arg[(condition) ? 1 : -1]) ++ ++PR_END_EXTERN_C ++ ++#endif /* prtypes_h___ */ ++ +--- /dev/null ++++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11p.h +@@ -0,0 +1,24 @@ ++/* This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ ++/* ++ * Copyright (C) 1994-1999 RSA Security Inc. Licence to copy this document ++ * is granted provided that it is identified as "RSA Security Inc. Public-Key ++ * Cryptography Standards (PKCS)" in all material mentioning or referencing ++ * this document. ++ */ ++/* these data types are platform/implementation dependent. */ ++/* ++ * Packing was removed from the shipped RSA header files, even ++ * though it's still needed. put in a central file to help merging.. ++ */ ++ ++#if defined(_WIN32) || defined(_WINDOWS) ++#ifdef __clang__ ++#pragma clang diagnostic ignored "-Wpragma-pack" ++#endif ++#ifdef _MSC_VER ++#pragma warning(disable : 4103) ++#endif ++#pragma pack(push, cryptoki, 1) ++#endif +--- a/src/jdk.crypto.cryptoki/unix/native/libj2pkcs11/p11_md.h ++++ b/src/jdk.crypto.cryptoki/unix/native/libj2pkcs11/p11_md.h +@@ -63,11 +63,6 @@ + #ifndef _P11_MD_H + #define _P11_MD_H 1 + +-#define CK_PTR * +-#define CK_DEFINE_FUNCTION(returnType, name) returnType name +-#define CK_DECLARE_FUNCTION(returnType, name) returnType name +-#define CK_DECLARE_FUNCTION_POINTER(returnType, name) returnType (* name) +-#define CK_CALLBACK_FUNCTION(returnType, name) returnType (* name) + #ifndef NULL_PTR + #define NULL_PTR 0 + #endif +--- a/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11wrapper.h ++++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/pkcs11wrapper.h +@@ -172,8 +172,8 @@ + #define min(a, b) (((a) < (b)) ? (a) : (b)) + #endif + +-#define ckBBoolToJBoolean(x) ((x == TRUE) ? JNI_TRUE : JNI_FALSE); +-#define jBooleanToCKBBool(x) ((x == JNI_TRUE) ? TRUE : FALSE); ++#define ckBBoolToJBoolean(x) ((x == CK_TRUE) ? JNI_TRUE : JNI_FALSE); ++#define jBooleanToCKBBool(x) ((x == JNI_TRUE) ? CK_TRUE : CK_FALSE); + + #define ckByteToJByte(x) ((jbyte) x) + #define jByteToCKByte(x) ((CK_BYTE) x) +--- a/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_convert.c ++++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_convert.c +@@ -1543,7 +1543,9 @@ CK_VOID_PTR jMechParamToCKMechParamPtrSl + ckpParamPtr = jX942Dh2DeriveParamToCKX942Dh2DeriveParamPtr(env, jParam, ckpLength); + break; + // defined by pkcs11.h but we don't support ++#if 0 + case CKM_KEA_DERIVE: // CK_KEA_DERIVE_PARAMS ++#endif + case CKM_RC2_CBC: // CK_RC2_CBC_PARAMS + case CKM_RC2_MAC_GENERAL: // CK_RC2_MAC_GENERAL_PARAMS + case CKM_RC5_ECB: // CK_RC5_PARAMS +--- a/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_util.c ++++ b/src/jdk.crypto.cryptoki/share/native/libj2pkcs11/p11_util.c +@@ -407,7 +407,9 @@ void freeCKMechanismPtr(CK_MECHANISM_PTR + case CKM_TLS_MAC: + case CKM_AES_CTR: + case CKM_RSA_PKCS_PSS: ++#if 0 + case CKM_CAMELLIA_CTR: ++#endif + // params do not contain pointers + break; + default: diff --git a/patches/pass-extra-flags.diff b/patches/pass-extra-flags.diff new file mode 100644 index 000000000..cbf36c553 --- /dev/null +++ b/patches/pass-extra-flags.diff @@ -0,0 +1,25 @@ +--- a/src/hotspot/make/linux/makefiles/jsig.make ++++ b/src/hotspot/make/linux/makefiles/jsig.make +@@ -54,7 +54,9 @@ endif + $(LIBJSIG): $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE) + @echo $(LOG_INFO) Making signal interposition lib... + $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \ +- $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS) $(EXTRA_CFLAGS) -o $@ $< -ldl ++ $(LFLAGS_JSIG) $(EXTRA_LDFLAGS) \ ++ $(JSIG_DEBUG_CFLAGS) $(EXTRA_CFLAGS) \ ++ -o $@ $< -ldl + ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) + $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJSIG_DEBUGINFO) + $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJSIG_DEBUGINFO) $@ +--- a/src/hotspot/make/linux/makefiles/vm.make ++++ b/src/hotspot/make/linux/makefiles/vm.make +@@ -118,7 +118,8 @@ CFLAGS += $(CFLAGS/NOEX) + + # Extra flags from gnumake's invocation or environment + CFLAGS += $(EXTRA_CFLAGS) +-LFLAGS += $(EXTRA_CFLAGS) ++CXXFLAGS += $(EXTRA_CXXFLAGS) ++LFLAGS += $(EXTRA_LDFLAGS) + + # Don't set excutable bit on stack segment + # the same could be done by separate execstack command diff --git a/patches/power-opt.diff b/patches/power-opt.diff new file mode 100644 index 000000000..6d927ae81 --- /dev/null +++ b/patches/power-opt.diff @@ -0,0 +1,11 @@ +--- a/make/autoconf/flags-cflags.m4 ++++ b/make/autoconf/flags-cflags.m4 +@@ -744,7 +744,7 @@ + POWER_TUNE_VERSION="-mtune=power8" + ] + ) +- $1_CFLAGS_CPU="-mcpu=power8 ${POWER_TUNE_VERSION}" ++ $1_CFLAGS_CPU="" + $1_CFLAGS_CPU_JVM="${$1_CFLAGS_CPU_JVM} -DABI_ELFv2" + fi + elif test "x$FLAGS_CPU" = xs390x; then diff --git a/patches/reproducible-build-jmod.diff b/patches/reproducible-build-jmod.diff new file mode 100644 index 000000000..eb7618e15 --- /dev/null +++ b/patches/reproducible-build-jmod.diff @@ -0,0 +1,39 @@ +Description: jlink: Hash of module differs to expected hash recorded in java.base + The cause is the use of dh_strip_nondeterminism late in the build + process. This reorganises the jmod files, which in turn changes their + SHA256 checksums. This would not be a problem, except that the + checksums are saved in java.base.jmod *before* the use of + dh_strip_nondeterminism. Performing this stripping immediately after + each jmod file is created results in the checksums being consistent + throughout. +Author: Julian Gilbey <jdg@debian.org> +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=944738 +Forwarded: not-needed + +--- a/make/CreateJmods.gmk ++++ b/make/CreateJmods.gmk +@@ -248,6 +248,15 @@ endif + + # Create jmods in the support dir and then move them into place to keep the + # module path in $(IMAGES_OUTPUTDIR)/jmods valid at all times. ++# strip-nondeterminism requires the same timestamp as ++# dh_strip_nondeterminism uses, so we determine this first. ++# Fall back to the original behavior if the tools are missing for backports ++DSN_TIMESTAMP := $(shell perl -MDebian::Debhelper::Dh_Lib -e 'print get_source_date_epoch()' 2>/dev/null) ++ifneq (,$(DSN_TIMESTAMP)) ++ ifneq (,$(wildcard /bin/strip-nondeterminism /usr/bin/strip-nondeterminism)) ++ use_strip_ndt = yes ++ endif ++endif + $(eval $(call SetupExecute, create_$(JMOD_FILE), \ + WARN := Creating $(INTERIM_MSG)$(JMOD_FILE), \ + DEPS := $(DEPS), \ +@@ -259,7 +268,7 @@ $(eval $(call SetupExecute, create_$(JMO + --module-path $(JMODS_DIR) $(JMOD_FLAGS) \ + --date $(SOURCE_DATE_ISO_8601) \ + $(JMODS_SUPPORT_DIR)/$(JMOD_FILE), \ +- POST_COMMAND := $(MV) $(JMODS_SUPPORT_DIR)/$(JMOD_FILE) $(JMODS_DIR)/$(JMOD_FILE), \ ++ POST_COMMAND := $(if $(use_strip_ndt),strip-nondeterminism --timestamp $(DSN_TIMESTAMP) $(JMODS_SUPPORT_DIR)/$(JMOD_FILE) && )$(MV) $(JMODS_SUPPORT_DIR)/$(JMOD_FILE) $(JMODS_DIR)/$(JMOD_FILE), \ + )) + + TARGETS += $(create_$(JMOD_FILE)) diff --git a/patches/reproducible-build-user.diff b/patches/reproducible-build-user.diff new file mode 100644 index 000000000..91bd71e5f --- /dev/null +++ b/patches/reproducible-build-user.diff @@ -0,0 +1,14 @@ +Description: Makes the build user invariant to improve the reproducibility (it appears in the interval VM version in libjvm.so) +Author: Emmanuel Bourg <ebourg@apache.org> +Forwarded: no +--- a/make/autoconf/basic.m4 ++++ b/make/autoconf/basic.m4 +@@ -97,7 +97,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_PATHS], + + # Setup username (for use in adhoc version strings etc) + # Outer [ ] to quote m4. +- [ USERNAME=`$ECHO "$USER" | $TR -d -c '[a-z][A-Z][0-9]'` ] ++ [ USERNAME="unknown" ] + AC_SUBST(USERNAME) + ]) + diff --git a/patches/reproducible-character-data.diff b/patches/reproducible-character-data.diff new file mode 100644 index 000000000..f21557183 --- /dev/null +++ b/patches/reproducible-character-data.diff @@ -0,0 +1,14 @@ +Description: Makes the generated character data classes reproducible (removes a timestamp and trims a build path captured in the comments) +Author: Emmanuel Bourg <ebourg@apache.org> +Forwarded: no +--- a/make/jdk/src/classes/build/tools/generatecharacter/GenerateCharacter.java ++++ b/make/jdk/src/classes/build/tools/generatecharacter/GenerateCharacter.java +@@ -1810,7 +1810,7 @@ + } + commentStart = (Csyntax ? "/*" : "//"); + commentEnd = (Csyntax ? " */" : ""); +- commandLineDescription = desc.toString().replace("\\", "\\\\"); ++ commandLineDescription = desc.toString().replace("\\", "\\\\").replace(System.getProperty("user.dir").replace("make/gensrc", ""), ""); + } + + private static void searchBins(long[] map, int binsOccupied) throws Exception { diff --git a/patches/reproducible-copyright-headers.diff b/patches/reproducible-copyright-headers.diff new file mode 100644 index 000000000..bba2371d6 --- /dev/null +++ b/patches/reproducible-copyright-headers.diff @@ -0,0 +1,64 @@ +Description: Makes the generated copyright headers reproducible +Author: Emmanuel Bourg <ebourg@apache.org> +Forwarded: no +--- a/make/jdk/src/classes/build/tools/cldrconverter/CopyrightHeaders.java ++++ b/make/jdk/src/classes/build/tools/cldrconverter/CopyrightHeaders.java +@@ -26,6 +26,7 @@ + package build.tools.cldrconverter; + + import java.util.Calendar; ++import java.util.Date; + import java.util.GregorianCalendar; + import java.util.Locale; + import java.util.TimeZone; +@@ -146,8 +147,14 @@ class CopyrightHeaders { + } + + private static int getYear() { +- return new GregorianCalendar(TimeZone.getTimeZone("America/Los_Angeles"), +- Locale.US).get(Calendar.YEAR); ++ Date date = new Date(); ++ if (System.getenv("SOURCE_DATE_EPOCH") != null) { ++ date = new Date(1000 * Long.valueOf(System.getenv("SOURCE_DATE_EPOCH"))); ++ } ++ ++ GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"), Locale.ENGLISH); ++ calendar.setTime(date); ++ return calendar.get(Calendar.YEAR); + } + + // no instantiation +--- a/make/jdk/src/classes/build/tools/generatelsrequivmaps/EquivMapsGenerator.java ++++ b/make/jdk/src/classes/build/tools/generatelsrequivmaps/EquivMapsGenerator.java +@@ -34,9 +34,13 @@ import java.time.ZoneId; + import java.time.ZonedDateTime; + import java.util.ArrayList; + import java.util.Arrays; ++import java.util.Calendar; ++import java.util.Date; ++import java.util.GregorianCalendar; + import java.util.List; + import java.util.Locale; + import java.util.Map; ++import java.util.TimeZone; + import java.util.TreeMap; + import java.util.stream.Collectors; + +@@ -246,8 +250,15 @@ public class EquivMapsGenerator { + + "}"; + + private static String getOpenJDKCopyright() { +- int year = ZonedDateTime.now(ZoneId +- .of("America/Los_Angeles")).getYear(); ++ Date date = new Date(); ++ if (System.getenv("SOURCE_DATE_EPOCH") != null) { ++ date = new Date(1000 * Long.valueOf(System.getenv("SOURCE_DATE_EPOCH"))); ++ } ++ ++ GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"), Locale.ENGLISH); ++ calendar.setTime(date); ++ ++ int year = calendar.get(Calendar.YEAR); + return String.format(Locale.US, COPYRIGHT, year); + } + diff --git a/patches/reproducible-javadoc-timestamp.diff b/patches/reproducible-javadoc-timestamp.diff new file mode 100644 index 000000000..8cabed1f9 --- /dev/null +++ b/patches/reproducible-javadoc-timestamp.diff @@ -0,0 +1,41 @@ +Description: Makes the timestamp in the javadoc files reproducible when SOURCE_DATE_EPOCH is specified +Author: Emmanuel Bourg <ebourg@apache.org> +Forwarded: no +--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Head.java ++++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/markup/Head.java +@@ -239,6 +239,9 @@ public class Head { + */ + public Content toContent() { + Date now = showTimestamp ? calendar.getTime() : null; ++ if (now != null && System.getenv("SOURCE_DATE_EPOCH") != null) { ++ now = new Date(1000 * Long.parseLong(System.getenv("SOURCE_DATE_EPOCH"))); ++ } + + HtmlTree tree = new HtmlTree(HtmlTag.HEAD); + tree.add(getGeneratedBy(showTimestamp, now)); +@@ -250,6 +253,9 @@ public class Head { + + if (showTimestamp) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); ++ if (System.getenv("SOURCE_DATE_EPOCH") != null) { ++ dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); ++ } + tree.add(HtmlTree.META("dc.created", dateFormat.format(now))); + } + +@@ -282,7 +288,14 @@ public class Head { + private Comment getGeneratedBy(boolean timestamp, Date now) { + String text = "Generated by javadoc"; // marker string, deliberately not localized + if (timestamp) { +- text += " ("+ docletVersion + ") on " + now; ++ text += " ("+ docletVersion + ") on "; ++ if (System.getenv("SOURCE_DATE_EPOCH") == null) { ++ text += now; ++ } else { ++ SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); ++ fmt.setTimeZone(TimeZone.getTimeZone("UTC")); ++ text += fmt.format(now); ++ } + } + return new Comment(text); + } diff --git a/patches/reproducible-module-info.diff b/patches/reproducible-module-info.diff new file mode 100644 index 000000000..1d18991bc --- /dev/null +++ b/patches/reproducible-module-info.diff @@ -0,0 +1,18 @@ +Description: Makes the generated module-info.java files reproducible (removes a captured build path) +Author: Emmanuel Bourg <ebourg@apache.org> +Forwarded: no +--- a/make/jdk/src/classes/build/tools/module/GenModuleInfoSource.java ++++ b/make/jdk/src/classes/build/tools/module/GenModuleInfoSource.java +@@ -156,9 +156,10 @@ + if (l.trim().startsWith("module ")) { + if (debug) { + // print URI rather than file path to avoid escape +- writer.format(" // source file: %s%n", sourceFile.toUri()); ++ String buildPath = System.getProperty("user.dir").replaceAll("make$", ""); ++ writer.format(" // source file: %s%n", sourceFile.toUri().toString().replace(buildPath, "")); + for (Path file : extraFiles) { +- writer.format(" // %s%n", file.toUri()); ++ writer.format(" // %s%n", file.toUri().toString().replace(buildPath, "")); + } + } + break; diff --git a/patches/reproducible-properties-timestamp.diff b/patches/reproducible-properties-timestamp.diff new file mode 100644 index 000000000..a24a4f6a6 --- /dev/null +++ b/patches/reproducible-properties-timestamp.diff @@ -0,0 +1,49 @@ +Description: Makes the timestamp in the properties files header reproducible when SOURCE_DATE_EPOCH is specified +Author: Emmanuel Bourg <ebourg@apache.org> +Forwarded: no +--- a/src/java.base/share/classes/java/util/Properties.java ++++ b/src/java.base/share/classes/java/util/Properties.java +@@ -41,6 +41,8 @@ import java.io.UnsupportedEncodingExcept + import java.nio.charset.Charset; + import java.nio.charset.IllegalCharsetNameException; + import java.nio.charset.UnsupportedCharsetException; ++import java.security.AccessController; ++import java.security.PrivilegedAction; + import java.util.concurrent.ConcurrentHashMap; + import java.util.function.BiConsumer; + import java.util.function.BiFunction; +@@ -953,7 +955,7 @@ public class Properties extends Hashtabl + if (sysPropVal != null && !sysPropVal.isEmpty()) { + writeComments(bw, sysPropVal); + } else { +- bw.write("#" + new Date()); ++ bw.write("#" + getFormattedTimestamp()); + bw.newLine(); + } + } +@@ -1598,4 +1600,25 @@ public class Properties extends Hashtabl + } + this.map = map; + } ++ ++ /** ++ * Returns a formatted timestamp to be used in the properties file header. ++ * The date used is the current date, unless the SOURCE_DATE_EPOCH ++ * environment variable is specified. In this case the format used is ++ * locale and timezone insensitive to ensure the output is reproducible. ++ */ ++ @SuppressWarnings("removal") ++ private static String getFormattedTimestamp() { ++ final String epoch = AccessController.doPrivileged( ++ (PrivilegedAction<String>)() -> System.getenv("SOURCE_DATE_EPOCH")); ++ if (epoch == null) { ++ return new Date().toString(); ++ } else { ++ // Use the SOURCE_DATE_EPOCH timestamp and make the format locale/timezone insensitive ++ java.text.SimpleDateFormat fmt = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", java.util.Locale.ENGLISH); ++ fmt.setTimeZone(java.util.TimeZone.getTimeZone("UTC")); ++ Date date = new Date(1000 * Long.parseLong(epoch)); ++ return fmt.format(date); ++ } ++ } + } diff --git a/patches/riscv64.diff b/patches/riscv64.diff new file mode 100644 index 000000000..571cff6ef --- /dev/null +++ b/patches/riscv64.diff @@ -0,0 +1,58 @@ +# HG changeset patch +# User enevill +# Date 1521985117 -3600 +# Sun Mar 25 14:38:37 2018 +0100 +# Node ID 7d1ae835ef5194e7ae5b56b51f944029fe602d11 +# Parent 1b1de4b263c81853719f6bb0385fe23bc4e35f6c +8199138: Add RISC-V support to Zero +Reviewed-by: aph, erikj, ehelin, ihse + +--- a/make/autoconf/build-aux/config.guess ++++ b/make/autoconf/build-aux/config.guess +@@ -28,6 +28,13 @@ + # autoconf system (which might easily get lost in a future update), we wrap it + # and fix the broken property, if needed. + ++machine=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown ++if test $machine = riscv64; then ++ # This is all we need to know for riscv64 ++ echo riscv64-unknown-linux-gnu ++ exit ++fi ++ + DIR=`dirname $0` + OUT=`. $DIR/autoconf-config.guess 2> /dev/null` + +--- a/make/autoconf/build-aux/config.sub ++++ b/make/autoconf/build-aux/config.sub +@@ -53,8 +53,8 @@ + exit + fi + +-# Filter out everything that doesn't begin with "aarch64-" +-if ! echo $* | grep '^aarch64-' >/dev/null ; then ++# First, filter out everything that doesn't begin with "aarch64-" or "riscv64-" ++if ! echo $* | grep '^aarch64-\|^riscv64-' >/dev/null ; then + . $DIR/autoconf-config.sub "$@" + # autoconf-config.sub exits, so we never reach here, but just in + # case we do: +@@ -69,6 +69,10 @@ + config=`echo $1 | sed 's/^aarch64-/arm-/'` + sub_args="$sub_args $config" + shift; ;; ++ riscv64-* ) ++ config=`echo $1 | sed 's/^riscv64-/x86-/'` ++ sub_args="$sub_args $config" ++ shift; ;; + - ) # Use stdin as input. + sub_args="$sub_args $1" + shift; break ;; +@@ -81,7 +85,7 @@ + result=`. $DIR/autoconf-config.sub $sub_args "$@"` + exitcode=$? + +-result=`echo $result | sed "s/^arm-/aarch64-/"` ++result=`echo $result | sed "s/^arm-/aarch64-/" | sed "s/^x86-/riscv64-/"` + + echo $result + exit $exitcode diff --git a/patches/s390x-opt.diff b/patches/s390x-opt.diff new file mode 100644 index 000000000..5c27693cb --- /dev/null +++ b/patches/s390x-opt.diff @@ -0,0 +1,12 @@ +--- a/make/autoconf/flags-cflags.m4 ++++ b/make/autoconf/flags-cflags.m4 +@@ -749,6 +749,9 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_CPU_DEP], + fi + elif test "x$FLAGS_CPU" = xs390x; then + $1_CFLAGS_CPU="-mbackchain -march=z10" ++ if test "x$VENDOR_FLAGS_CPU" != x; then ++ $1_CFLAGS_CPU="-mbackchain $VENDOR_FLAGS_CPU" ++ fi + fi + + if test "x$FLAGS_CPU_ARCH" != xarm && test "x$FLAGS_CPU_ARCH" != xppc; then diff --git a/patches/series b/patches/series new file mode 100644 index 000000000..3892df039 --- /dev/null +++ b/patches/series @@ -0,0 +1,48 @@ +system-pcsclite.diff +hotspot-mips-align.diff +icc_loading_with_symlink.diff +icedtea-override-redirect-compiz.diff +#jexec.diff +default-jvm-cfg.diff +multiple-pkcs11-library-init.diff +s390x-opt.diff +jdk-getAccessibleValue.diff +#jtreg-location.diff FIXME +jdk-i18n-pt_BR.diff +#machine-flag.diff +zero-x32.diff +#atk-wrapper-security.diff +# java-access-bridge-security.diff +# jdk-pulseaudio.diff +dnd-files.diff +m68k-support.diff +# reproducible-javadoc-timestamp.diff +make-debug-print.diff +Don-t-optimize-fdlibm-fork-for-Zero-on-linux-sparc-Z.patch +reproducible-properties-timestamp.diff +reproducible-character-data.diff +reproducible-module-info.diff +#reproducible-copyright-headers.diff +#reproducible-build-user.diff +#riscv64.diff +reproducible-build-jmod.diff +mips.diff +#nspr+nss-headers.diff +misalign-pointer-for-armhf.patch +#update-permission-test.patch +ldap-timeout-test-use-ip.patch +test-use-ip-address.patch +arch-add-ports.diff +warn-fontmanager.patch +hsdis-fpic.patch +jdk-8335238-workaround.patch +# FIXME: which one of these two? +zero-alpha-workaround.diff +#jdk-8347014-proposed.patch +power-opt.diff +test-empty-path.patch +jdk-8381555.diff +jdk-8385738.diff +jdk-8387580.diff +jdk-8377035.diff +jdk-8388170-proposed.diff diff --git a/patches/set-exec-name.diff b/patches/set-exec-name.diff new file mode 100644 index 000000000..d1fc39879 --- /dev/null +++ b/patches/set-exec-name.diff @@ -0,0 +1,47 @@ +--- a/src/jdk/src/solaris/bin/java_md.c.orig ++++ b/src/jdk/src/solaris/bin/java_md.c +@@ -688,8 +688,19 @@ + char buf[PATH_MAX+1]; + int len = readlink(self, buf, PATH_MAX); + if (len >= 0) { ++ const char* prefixes[] = {"/cow/", "/persistmnt/", "/rofs/", "/rwfs/", "/squashmnt/", NULL}; ++ const char **prefix; ++ size_t prefix_len = 0; + buf[len] = '\0'; /* readlink doesn't nul terminate */ +- exec_path = JLI_StringDup(buf); ++ for (prefix = prefixes; *prefix; prefix++) { ++ prefix_len = strlen(buf) < strlen(*prefix) ? strlen(buf) : strlen(*prefix); ++ if (!strncmp(*prefix, buf, prefix_len)) { ++ prefix_len--; ++ break; ++ } ++ prefix_len = 0; ++ } ++ exec_path = JLI_StringDup(buf + prefix_len); + } + } + #else /* !__solaris__ && !__linux */ +--- a/src/hotspot/src/os/posix/launcher/java_md.c.orig ++++ b/src/hotspot/src/os/posix/launcher/java_md.c +@@ -967,8 +967,19 @@ + char buf[PATH_MAX+1]; + int len = readlink(self, buf, PATH_MAX); + if (len >= 0) { +- buf[len] = '\0'; /* readlink doesn't nul terminate */ +- exec_path = JLI_StringDup(buf); ++ buf[len] = '\0'; /* readlink doesn't nul terminate */ ++ const char* prefixes[] = {"/cow/", "/persistmnt/", "/rofs/", "/rwfs/", "/squashmnt/", NULL}; ++ const char **prefix; ++ size_t prefix_len = 0; ++ for (prefix = prefixes; *prefix; prefix++) { ++ prefix_len = strlen(buf) < strlen(*prefix) ? strlen(buf) : strlen(*prefix); ++ if (!strncmp(*prefix, buf, prefix_len)) { ++ prefix_len--; ++ break; ++ } ++ prefix_len = 0; ++ } ++ exec_path = JLI_StringDup(buf + prefix_len); + } + } + #else /* !__sun && !__linux */ diff --git a/patches/stack-direction.diff b/patches/stack-direction.diff new file mode 100644 index 000000000..a4421ca35 --- /dev/null +++ b/patches/stack-direction.diff @@ -0,0 +1,215 @@ +--- a/src/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp.old 2010-01-06 16:30:02.000000000 +0100 ++++ b/src/hotspot/src/os_cpu/linux_zero/vm/os_linux_zero.cpp 2010-01-06 23:14:47.000000000 +0100 +@@ -144,8 +144,13 @@ + address addr = (address) info->si_addr; + + // check if fault address is within thread stack ++#ifdef __hppa__ ++ if (addr > thread->stack_base() && ++ addr <= thread->stack_base() + thread->stack_size()) { ++#else + if (addr < thread->stack_base() && + addr >= thread->stack_base() - thread->stack_size()) { ++#endif + // stack overflow + if (thread->in_stack_yellow_zone(addr)) { + thread->disable_stack_yellow_zone(); +@@ -294,7 +299,11 @@ + if (res != 0) { + fatal1("pthread_attr_getstack failed with errno = %d", res); + } ++#ifdef __hppa__ ++ address stack_top = stack_bottom - stack_bytes; ++#else + address stack_top = stack_bottom + stack_bytes; ++#endif + + // The block of memory returned by pthread_attr_getstack() includes + // guard pages where present. We need to trim these off. +@@ -321,7 +330,11 @@ + stack_bottom += (total_pages - guard_pages) / 2 * page_bytes; + #endif // IA64 + ++#ifdef __hppa__ ++ stack_bottom -= guard_bytes; ++#else + stack_bottom += guard_bytes; ++#endif + + pthread_attr_destroy(&attr); + +@@ -329,19 +342,36 @@ + // by pthread_attr_getstack is the maximum size it could possibly + // be given what currently mapped. This can be huge, so we cap it. + if (os::Linux::is_initial_thread()) { ++#ifdef __hppa__ ++ stack_bytes = stack_bottom - stack_top; ++#else + stack_bytes = stack_top - stack_bottom; ++#endif + + if (stack_bytes > JavaThread::stack_size_at_create()) + stack_bytes = JavaThread::stack_size_at_create(); + ++#ifdef __hppa__ ++ stack_bottom = stack_top + stack_bytes; ++#else + stack_bottom = stack_top - stack_bytes; ++#endif + } + ++#ifdef __hppa__ ++ assert(os::current_stack_pointer() <= stack_bottom, "should do"); ++ assert(os::current_stack_pointer() > stack_top, "should do"); ++#else + assert(os::current_stack_pointer() >= stack_bottom, "should do"); + assert(os::current_stack_pointer() < stack_top, "should do"); ++#endif + + *bottom = stack_bottom; ++#ifdef __hppa__ ++ *size = stack_bottom - stack_top; ++#else + *size = stack_top - stack_bottom; ++#endif + } + + address os::current_stack_base() { +--- a/src/hotspot/src/share/vm/runtime/thread.cpp.old 2009-10-02 23:16:39.000000000 +0200 ++++ b/src/hotspot/src/share/vm/runtime/thread.cpp 2010-01-06 23:31:24.000000000 +0100 +@@ -713,8 +713,13 @@ + else if (is_ConcurrentGC_thread()) st->print("ConcurrentGCThread"); + else st->print("Thread"); + ++#ifdef __hppa__ + st->print(" [stack: " PTR_FORMAT "," PTR_FORMAT "]", + _stack_base - _stack_size, _stack_base); ++#else ++ st->print(" [stack: " PTR_FORMAT "," PTR_FORMAT "]", ++ _stack_base + _stack_size, _stack_base); ++#endif + + if (osthread()) { + st->print(" [id=%d]", osthread()->thread_id()); +@@ -792,7 +797,11 @@ + bool Thread::is_in_stack(address adr) const { + assert(Thread::current() == this, "is_in_stack can only be called from current thread"); + address end = os::current_stack_pointer(); ++#ifdef __hppa__ ++ if (stack_base() <= adr && adr <= end) return true; ++#else + if (stack_base() >= adr && adr >= end) return true; ++#endif + + return false; + } +@@ -804,7 +813,11 @@ + // should be revisited, and they should be removed if possible. + + bool Thread::is_lock_owned(address adr) const { ++#ifdef __hppa__ ++ return (_stack_base <= adr && adr <= (_stack_base + _stack_size)); ++#else + return (_stack_base >= adr && adr >= (_stack_base - _stack_size)); ++#endif + } + + bool Thread::set_as_starting_thread() { +@@ -2108,7 +2121,11 @@ + + void JavaThread::create_stack_guard_pages() { + if (! os::uses_stack_guard_pages() || _stack_guard_state != stack_guard_unused) return; ++#ifdef __hppa__ ++ address low_addr = stack_base(); ++#else + address low_addr = stack_base() - stack_size(); ++#endif + size_t len = (StackYellowPages + StackRedPages) * os::vm_page_size(); + + int allocate = os::allocate_stack_guard_pages(); +@@ -2131,7 +2148,11 @@ + + void JavaThread::remove_stack_guard_pages() { + if (_stack_guard_state == stack_guard_unused) return; ++#ifdef __hppa__ ++ address low_addr = stack_base(); ++#else + address low_addr = stack_base() - stack_size(); ++#endif + size_t len = (StackYellowPages + StackRedPages) * os::vm_page_size(); + + if (os::allocate_stack_guard_pages()) { +@@ -2156,10 +2177,17 @@ + + // The base notation is from the stacks point of view, growing downward. + // We need to adjust it to work correctly with guard_memory() ++#ifdef __hppa__ ++ address base = stack_yellow_zone_base() + stack_yellow_zone_size(); ++ ++ guarantee(base > stack_base(),"Error calculating stack yellow zone"); ++ guarantee(base > os::current_stack_pointer(),"Error calculating stack yellow zone"); ++#else + address base = stack_yellow_zone_base() - stack_yellow_zone_size(); + + guarantee(base < stack_base(),"Error calculating stack yellow zone"); + guarantee(base < os::current_stack_pointer(),"Error calculating stack yellow zone"); ++#endif + + if (os::guard_memory((char *) base, stack_yellow_zone_size())) { + _stack_guard_state = stack_guard_enabled; +@@ -2178,7 +2206,11 @@ + + // The base notation is from the stacks point of view, growing downward. + // We need to adjust it to work correctly with guard_memory() ++#ifdef __hppa__ ++ address base = stack_yellow_zone_base() + stack_yellow_zone_size(); ++#else + address base = stack_yellow_zone_base() - stack_yellow_zone_size(); ++#endif + + if (os::unguard_memory((char *)base, stack_yellow_zone_size())) { + _stack_guard_state = stack_guard_yellow_disabled; +@@ -2192,10 +2224,17 @@ + // The base notation is from the stacks point of view, growing downward. + // We need to adjust it to work correctly with guard_memory() + assert(_stack_guard_state != stack_guard_unused, "must be using guard pages."); ++#ifdef __hppa__ ++ address base = stack_red_zone_base() + stack_red_zone_size(); ++ ++ guarantee(base > stack_base(),"Error calculating stack red zone"); ++ guarantee(base > os::current_stack_pointer(),"Error calculating stack red zone"); ++#else + address base = stack_red_zone_base() - stack_red_zone_size(); + + guarantee(base < stack_base(),"Error calculating stack red zone"); + guarantee(base < os::current_stack_pointer(),"Error calculating stack red zone"); ++#endif + + if(!os::guard_memory((char *) base, stack_red_zone_size())) { + warning("Attempt to guard stack red zone failed."); +@@ -2206,7 +2245,11 @@ + // The base notation is from the stacks point of view, growing downward. + // We need to adjust it to work correctly with guard_memory() + assert(_stack_guard_state != stack_guard_unused, "must be using guard pages."); ++#ifdef __hppa__ ++ address base = stack_red_zone_base() + stack_red_zone_size(); ++#else + address base = stack_red_zone_base() - stack_red_zone_size(); ++#endif + if (!os::unguard_memory((char *)base, stack_red_zone_size())) { + warning("Attempt to unguard stack red zone failed."); + } +@@ -2451,8 +2494,13 @@ + if (osthread()) { + st->print(", id=%d", osthread()->thread_id()); + } ++#ifdef __hppa__ ++ st->print(", stack(" PTR_FORMAT "," PTR_FORMAT ")", ++ _stack_base + _stack_size, _stack_base); ++#else + st->print(", stack(" PTR_FORMAT "," PTR_FORMAT ")", + _stack_base - _stack_size, _stack_base); ++#endif + st->print("]"); + return; + } diff --git a/patches/system-pcsclite.diff b/patches/system-pcsclite.diff new file mode 100644 index 000000000..c48e99064 --- /dev/null +++ b/patches/system-pcsclite.diff @@ -0,0 +1,186 @@ +--- a/make/autoconf/lib-bundled.m4 ++++ b/make/autoconf/lib-bundled.m4 +@@ -41,6 +41,7 @@ AC_DEFUN_ONCE([LIB_SETUP_BUNDLED_LIBS], + LIB_SETUP_ZLIB + LIB_SETUP_LCMS + LIB_SETUP_HARFBUZZ ++ LIB_SETUP_PCSCLITE + ]) + + ################################################################################ +@@ -357,3 +358,41 @@ AC_DEFUN_ONCE([LIB_SETUP_HARFBUZZ], + AC_SUBST(HARFBUZZ_CFLAGS) + AC_SUBST(HARFBUZZ_LIBS) + ]) ++ ++################################################################################ ++# Setup pcsclite ++################################################################################ ++AC_DEFUN_ONCE([LIB_SETUP_PCSCLITE], ++[ ++ AC_ARG_WITH(pcsclite, [AS_HELP_STRING([--with-pcsclite], ++ [use pcsclite from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])]) ++ ++ AC_MSG_CHECKING([for which pcsclite to use]) ++ ++ # default is bundled ++ DEFAULT_PCSCLITE=bundled ++ # if user didn't specify, use DEFAULT_PCSCLITE ++ if test "x${with_pcsclite}" = "x"; then ++ with_libpng=${DEFAULT_PCSCLITE} ++ fi ++ ++ if test "x${with_pcsclite}" = "xbundled"; then ++ USE_EXTERNAL_PCSCLITE=false ++ AC_MSG_RESULT([bundled]) ++ elif test "x${with_pcsclite}" = "xsystem"; then ++ PKG_CHECK_MODULES(PCSCLITE, libpcsclite, ++ [ PCSCLITE_FOUND=yes ], ++ [ PCSCLITE_FOUND=no ]) ++ if test "x${PCSCLITE_FOUND}" = "xyes"; then ++ USE_EXTERNAL_PCSCLITE=true ++ AC_MSG_RESULT([system]) ++ else ++ AC_MSG_RESULT([system not found]) ++ AC_MSG_ERROR([--with-pcsclite=system specified, but no pcsclite found!]) ++ fi ++ else ++ AC_MSG_ERROR([Invalid value of --with-pcsclite: ${with_pcsclite}, use 'system' or 'bundled']) ++ fi ++ ++ AC_SUBST(USE_EXTERNAL_PCSCLITE) ++]) +--- a/make/modules/java.smartcardio/Lib.gmk ++++ b/make/modules/java.smartcardio/Lib.gmk +@@ -33,12 +33,12 @@ include LibCommon.gmk + + $(eval $(call SetupJdkLibrary, BUILD_LIBJ2PCSC, \ + NAME := j2pcsc, \ +- CFLAGS_unix := -D__sun_jdk, \ ++ CFLAGS_unix := -D__sun_jdk -DUSE_SYSTEM_LIBPCSCLITE, \ + EXTRA_HEADER_DIRS := \ +- libj2pcsc/MUSCLE \ ++ /usr/include/PCSC \ + java.base:libjava, \ + OPTIMIZATION := LOW, \ +- LIBS_unix := $(LIBDL), \ ++ LIBS_unix := -lpcsclite $(LIBDL), \ + LIBS_windows := winscard.lib, \ + )) + +--- a/src/java.smartcardio/unix/native/libj2pcsc/pcsc_md.c ++++ b/src/java.smartcardio/unix/native/libj2pcsc/pcsc_md.c +@@ -36,6 +36,7 @@ + + #include "pcsc_md.h" + ++#ifndef USE_SYSTEM_LIBPCSCLITE + void *hModule; + FPTR_SCardEstablishContext scardEstablishContext; + FPTR_SCardConnect scardConnect; +@@ -47,6 +48,7 @@ FPTR_SCardListReaders scardListReaders; + FPTR_SCardBeginTransaction scardBeginTransaction; + FPTR_SCardEndTransaction scardEndTransaction; + FPTR_SCardControl scardControl; ++#endif + + /* + * Throws a Java Exception by name +@@ -74,8 +76,9 @@ static void throwIOException(JNIEnv *env + { + throwByName(env, "java/io/IOException", msg); + } +- ++#ifndef USE_SYSTEM_LIBPCSCLITE + static void *findFunction(JNIEnv *env, void *hModule, char *functionName) { ++ return NULL; + void *fAddress = dlsym(hModule, functionName); + if (fAddress == NULL) { + char errorMessage[256]; +@@ -85,9 +88,11 @@ static void *findFunction(JNIEnv *env, v + } + return fAddress; + } ++#endif + + JNIEXPORT void JNICALL Java_sun_security_smartcardio_PlatformPCSC_initialize + (JNIEnv *env, jclass thisClass, jstring jLibName) { ++#ifndef USE_SYSTEM_LIBPCSCLITE + const char *libName = (*env)->GetStringUTFChars(env, jLibName, NULL); + if (libName == NULL) { + throwNullPointerException(env, "PCSC library name is null"); +@@ -141,4 +146,5 @@ JNIEXPORT void JNICALL Java_sun_security + #else + scardControl = (FPTR_SCardControl) findFunction(env, hModule, "SCardControl132"); + #endif // __APPLE__ ++#endif + } +--- a/src/java.smartcardio/unix/native/libj2pcsc/pcsc_md.h ++++ b/src/java.smartcardio/unix/native/libj2pcsc/pcsc_md.h +@@ -23,6 +23,8 @@ + * questions. + */ + ++#ifndef USE_SYSTEM_LIBPCSCLITE ++ + typedef LONG (*FPTR_SCardEstablishContext)(DWORD dwScope, + LPCVOID pvReserved1, + LPCVOID pvReserved2, +@@ -111,3 +113,41 @@ extern FPTR_SCardListReaders scardListRe + extern FPTR_SCardBeginTransaction scardBeginTransaction; + extern FPTR_SCardEndTransaction scardEndTransaction; + extern FPTR_SCardControl scardControl; ++ ++#else ++ ++#define CALL_SCardEstablishContext(dwScope, pvReserved1, pvReserved2, phContext) \ ++ (SCardEstablishContext(dwScope, pvReserved1, pvReserved2, phContext)) ++ ++#define CALL_SCardConnect(hContext, szReader, dwSharedMode, dwPreferredProtocols, phCard, pdwActiveProtocols) \ ++ (SCardConnect(hContext, szReader, dwSharedMode, dwPreferredProtocols, phCard, pdwActiveProtocols)) ++ ++#define CALL_SCardDisconnect(hCard, dwDisposition) \ ++ (SCardDisconnect(hCard, dwDisposition)) ++ ++#define CALL_SCardStatus(hCard, mszReaderNames, pcchReaderLen, pdwState, pdwProtocol, pbAtr, pcbAtrLen) \ ++ (SCardStatus(hCard, mszReaderNames, pcchReaderLen, pdwState, pdwProtocol, pbAtr, pcbAtrLen)) ++ ++#define CALL_SCardGetStatusChange(hContext, dwTimeout, rgReaderStates, cReaders) \ ++ (SCardGetStatusChange(hContext, dwTimeout, rgReaderStates, cReaders)) ++ ++#define CALL_SCardTransmit(hCard, pioSendPci, pbSendBuffer, cbSendLength, \ ++ pioRecvPci, pbRecvBuffer, pcbRecvLength) \ ++ (SCardTransmit(hCard, pioSendPci, pbSendBuffer, cbSendLength, \ ++ pioRecvPci, pbRecvBuffer, pcbRecvLength)) ++ ++#define CALL_SCardListReaders(hContext, mszGroups, mszReaders, pcchReaders) \ ++ (SCardListReaders(hContext, mszGroups, mszReaders, pcchReaders)) ++ ++#define CALL_SCardBeginTransaction(hCard) \ ++ (SCardBeginTransaction(hCard)) ++ ++#define CALL_SCardEndTransaction(hCard, dwDisposition) \ ++ (SCardEndTransaction(hCard, dwDisposition)) ++ ++#define CALL_SCardControl(hCard, dwControlCode, pbSendBuffer, cbSendLength, \ ++ pbRecvBuffer, pcbRecvLength, lpBytesReturned) \ ++ (SCardControl(hCard, dwControlCode, pbSendBuffer, cbSendLength, \ ++ pbRecvBuffer, pcbRecvLength, lpBytesReturned)) ++ ++#endif +--- a/test/jdk/java/security/misc/Versions.java ++++ b/test/jdk/java/security/misc/Versions.java +@@ -55,12 +55,7 @@ public class Versions { + Pattern.compile("list/(?<n>[0-9a-f]+)/public_suffix_list.dat"), + "src/java.base/share/legal/public_suffix.md", + Pattern.compile("list/(?<n>[0-9a-f]+)/public_suffix_list.dat"), +- "java.base/public_suffix.md"}, +- {"src/java.smartcardio/unix/native/libj2pcsc/MUSCLE/pcsclite.h", +- Pattern.compile("#define PCSCLITE_VERSION_NUMBER +\"(?<n>[0-9\\.]+)\""), +- "src/java.smartcardio/unix/legal/pcsclite.md", +- Pattern.compile("## PC/SC Lite v(?<n>[0-9\\.]+)"), +- "java.smartcardio/pcsclite.md"} ++ "java.base/public_suffix.md"} + }; + } + diff --git a/patches/test-empty-path.patch b/patches/test-empty-path.patch new file mode 100644 index 000000000..3359aa3d3 --- /dev/null +++ b/patches/test-empty-path.patch @@ -0,0 +1,35 @@ +Description: disable tests requiring FileStore + FileStore tests fail in container infrastructure due to JDK-8166162. + This patch disables individual test cases requiring FileStore. + The patch is not needed upstream as the bug only occurs in specific + container configuration. +Author: Vladimir Petko <vladimir.petko@canonical.com> +Bug: https://bugs.openjdk.org/browse/JDK-8166162 +Forwarded: not-needed + +diff --git a/test/jdk/java/io/File/EmptyPath.java b/test/jdk/java/io/File/EmptyPath.java +index d3211f917..5daa08f0b 100644 +--- a/test/jdk/java/io/File/EmptyPath.java ++++ b/test/jdk/java/io/File/EmptyPath.java +@@ -120,7 +120,6 @@ public class EmptyPath { + } + } + +- @Test + public void getFreeSpace() throws IOException { + FileStore fs = Files.getFileStore(f.toPath()); + checkSpace(fs.getUnallocatedSpace(), f.getFreeSpace()); +@@ -141,13 +140,11 @@ public class EmptyPath { + assertEquals(p.toString(), f.getPath()); + } + +- @Test + public void getTotalSpace() throws IOException { + FileStore fs = Files.getFileStore(f.toPath()); + checkSpace(fs.getTotalSpace(), f.getTotalSpace()); + } + +- @Test + public void getUsableSpace() throws IOException { + FileStore fs = Files.getFileStore(f.toPath()); + checkSpace(fs.getUsableSpace(), f.getUsableSpace()); diff --git a/patches/test-use-ip-address.patch b/patches/test-use-ip-address.patch new file mode 100644 index 000000000..99a072d7c --- /dev/null +++ b/patches/test-use-ip-address.patch @@ -0,0 +1,17 @@ +Description: Use IP address in tests + Ubuntu build machines are not set up for dns. Use IP addresses to get correct test + outcomes. +Author: Vladimir Petko <vladimir.petko@canonical.com> +Forwarded: not-needed +Last-Update: 2023-03-27 +--- a/test/jdk/java/net/InetAddress/getOriginalHostName.java ++++ b/test/jdk/java/net/InetAddress/getOriginalHostName.java +@@ -39,7 +39,7 @@ public class getOriginalHostName { + SharedSecrets.getJavaNetInetAddressAccess(); + + public static void main(String[] args) throws Exception { +- final String HOST = "dummyserver.java.net"; ++ final String HOST = "localhost"; + InetAddress ia = null; + ia = getInetAddress(HOST); + if (ia != null) testInetAddress(ia, HOST); diff --git a/patches/update-permission-test.patch b/patches/update-permission-test.patch new file mode 100644 index 000000000..59a28ab17 --- /dev/null +++ b/patches/update-permission-test.patch @@ -0,0 +1,25 @@ +Description: Add missing permissions for TestNG 7.7 + TestNG has added more configuration properties, allow them in the minimal policy +Author: Vladimir Petko <vladimir.petko@canonical.com> +Last-Update: 2023-03-24 +--- a/test/jdk/java/lang/ProcessHandle/PermissionTest.java ++++ b/test/jdk/java/lang/ProcessHandle/PermissionTest.java +@@ -219,6 +219,7 @@ + permissions.add(new PropertyPermission("testng.mode.dryrun", "read")); + permissions.add(new PropertyPermission("testng.report.xml.name", "read")); + permissions.add(new PropertyPermission("testng.timezone", "read")); ++ permissions.add(new PropertyPermission("testng.default.verbose", "read")); + permissions.add(new ReflectPermission("suppressAccessChecks")); + permissions.add(new FilePermission("<<ALL FILES>>", "execute")); + } +--- a/test/jdk/java/sql/testng/util/TestPolicy.java ++++ b/test/jdk/java/sql/testng/util/TestPolicy.java +@@ -114,6 +114,8 @@ + permissions.add(new PropertyPermission("testng.mode.dryrun", "read")); + permissions.add(new PropertyPermission("testng.report.xml.name", "read")); + permissions.add(new PropertyPermission("testng.timezone", "read")); ++ permissions.add(new PropertyPermission("testng.default.verbose", "read")); ++ permissions.add(new PropertyPermission("testng.ignore.callback.skip", "read")); + permissions.add(new ReflectPermission("suppressAccessChecks")); + permissions.add(new FilePermission("<<ALL FILES>>", + "read, write, delete")); diff --git a/patches/warn-fontmanager.patch b/patches/warn-fontmanager.patch new file mode 100644 index 000000000..bf7738cbf --- /dev/null +++ b/patches/warn-fontmanager.patch @@ -0,0 +1,24 @@ +Description: print warning to install openjdk-*-jre package + fontmanager support was moved to recommends, warn user to + either install -jre package or recommended packages. + Forwarding is not needed as this is a Debian-only issue. +Author: Vladimir Petko <vladimir.petko@canonical.com> +Forwarded: not-needed + +--- a/src/java.desktop/share/classes/sun/font/FontManagerNativeLibrary.java ++++ b/src/java.desktop/share/classes/sun/font/FontManagerNativeLibrary.java +@@ -52,7 +52,13 @@ public class FontManagerNativeLibrary { + shared library in order to avoid dependency. */ + System.loadLibrary("freetype"); + } +- System.loadLibrary("fontmanager"); ++ ++ try { ++ System.loadLibrary("fontmanager"); ++ } catch (Throwable t) { ++ System.err.println("Please install the openjdk-*-jre package or recommended packages for openjdk-*-jre-headless."); ++ throw t; ++ } + } + + /* diff --git a/patches/zero-alpha-workaround.diff b/patches/zero-alpha-workaround.diff new file mode 100644 index 000000000..0d5cd7c1f --- /dev/null +++ b/patches/zero-alpha-workaround.diff @@ -0,0 +1,13 @@ +--- a/src/hotspot/os/linux/os_linux.cpp ++++ b/src/hotspot/os/linux/os_linux.cpp +@@ -2985,6 +2985,10 @@ + // Note that the value for MAP_FIXED_NOREPLACE differs between architectures, but all architectures + // supported by OpenJDK share the same flag value. + #define MAP_FIXED_NOREPLACE_value 0x100000 ++// on ALPHA, that triggers with 0x1000000 == 0x100000. why? ++#if defined(ALPHA) && defined(MAP_FIXED_NOREPLACE) ++#undef MAP_FIXED_NOREPLACE ++#endif + #ifndef MAP_FIXED_NOREPLACE + #define MAP_FIXED_NOREPLACE MAP_FIXED_NOREPLACE_value + #else diff --git a/patches/zero-x32.diff b/patches/zero-x32.diff new file mode 100644 index 000000000..d6387e446 --- /dev/null +++ b/patches/zero-x32.diff @@ -0,0 +1,13 @@ +--- a/make/autoconf/platform.m4 ++++ b/make/autoconf/platform.m4 +@@ -41,6 +41,10 @@ + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=little ++ case "$host" in *x32) ++ VAR_CPU=x32 ++ VAR_CPU_BITS=32 ++ esac + ;; + i?86) + VAR_CPU=x86 diff --git a/rules b/rules new file mode 100755 index 000000000..9dda63e35 --- /dev/null +++ b/rules @@ -0,0 +1,2220 @@ +#!/usr/bin/make -f +# -*- makefile -*- + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 +include /usr/share/dpkg/buildflags.mk + +unexport LANG LC_ALL + +dh_version := $(shell dpkg-query -f '$${Version}\n' -W debhelper | sed -n 's/^\(.\).*/\1/p') + +# using brace expansion and substring replacements (${var:0:2}). +SHELL = /bin/bash + +# use gnu time in verbose mode if available, otherwise default to the shell builtin +ifneq (,$(wildcard /usr/bin/time)) + TIME = /usr/bin/time -v +else + TIME = time +endif + +vafilt = $(subst $(2)=,,$(filter $(2)=%,$(1))) + +DPKG_VARS := $(shell dpkg-architecture) +DEB_HOST_GNU_TYPE ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_GNU_TYPE) +DEB_HOST_ARCH ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH) +DEB_BUILD_ARCH ?= $(call vafilt,$(DPKG_VARS),DEB_BUILD_ARCH) +DEB_HOST_ARCH_CPU ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_ARCH_CPU) +DEB_HOST_MULTIARCH ?= $(call vafilt,$(DPKG_VARS),DEB_HOST_MULTIARCH) + +PATH := $(CURDIR)/bin:$(PATH) +export PATH + +CHANGELOG_VARS := $(shell dpkg-parsechangelog | sed -n 's/ /_/g;/^[^_]/s/^\([^:]*\):_\(.*\)/\1=\2/p') +PKGSOURCE := $(call vafilt,$(CHANGELOG_VARS),Source) +PKGVERSION := $(call vafilt,$(CHANGELOG_VARS),Version) +PKGYEAR := $(shell echo $(call vafilt,$(CHANGELOG_VARS),Timestamp) | date --utc +%Y) + +distribution := $(shell lsb_release --id --short) +distrel := $(shell lsb_release --codename --short) +derivative := $(shell if dpkg-vendor --derives-from Ubuntu; then echo Ubuntu; \ + elif dpkg-vendor --derives-from Debian; then echo Debian; \ + else echo Unknown; fi) +ifeq ($(distrel),n/a) + distrel := sid +endif + +ifneq (,$(filter $(distrel),precise)) + OBJCOPY := objcopy + STRIP := strip +else + OBJCOPY := $(DEB_HOST_GNU_TYPE)-objcopy + STRIP := $(DEB_HOST_GNU_TYPE)-strip +endif + +multiarch_dir = /$(DEB_HOST_MULTIARCH) + +hotspot_archs = amd64 i386 arm64 armhf ppc64 ppc64el riscv64 s390x +# see https://bugs.openjdk.org/browse/JDK-8321125 (armhf removed) +# see https://bugs.openjdk.org/browse/JDK-8338285, +# https://bugs.openjdk.org/browse/JDK-8341871 (i386 removed) +hotspot_archs = amd64 arm64 ppc64 ppc64el riscv64 s390x + +jtreg_archs = $(hotspot_archs) alpha ia64 powerpc ppc64 sh4 x32 +jtreg_archs += armel loong64 mipsel mips64el +jtreg_archs += riscv64 + + +# FIXME: use bootcycle builds for zero archs? +bootcycle_build = $(if $(filter $(DEB_HOST_ARCH), $(hotspot_archs)),yes) +#bootcycle_build = $(if $(filter $(DEB_HOST_ARCH), amd64 i386),yes) +#bootcycle_build = +zbootcycle_build = +zbootcycle_build = yes +ifneq ($(DEB_HOST_ARCH),$(DEB_BUILD_ARCH)) + bootcycle_build = + zbootcycle_build = +endif +ifneq (,$(filter nobootcycle, $(DEB_BUILD_OPTIONS))) + bootcycle_build = + zbootcycle_build = +endif + +ifneq (,$(filter $(distrel),lucid precise quantal raring saucy trusty utopic vivid wily lenny etch squeeze wheezy jessie)) + is_default = no +else + is_default = yes +endif + +is_upstream_release = yes + +srcdir = . +builddir = build +zbuilddir = build-zero + +VENDOR = openjdk +Vendor = OpenJDK +TOP = usr/lib/jvm +origin = openjdk +basename = openjdk-$(shortver) +ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs))) + priority = $(if $(filter yes, $(is_default)),2511,2509) + vm_name = Hotspot JIT +else + priority = $(if $(filter yes, $(is_default)),2504,2503) + vm_name = Hotspot Zero +endif +jvmver = 1.25.0 +shortver = 25 +v_debian := $(shell echo $(PKGVERSION) | sed 's/ea//' | sed 's/\~us[[:digit:]]\+//') +v_upstream := $(shell echo $(v_debian) | sed 's/-[^-][^-]*$$//') +v_pkgrel := $(shell echo $(v_debian) | sed 's/^.*-//') + +ifeq (yes,$(is_upstream_release)) + v_upbase := $(word 1, $(subst +, , $(v_upstream))) + v_upbuild := $(word 2, $(subst +, , $(v_upstream))) + ifneq ($(v_debian),$(v_upbase)+$(v_upbuild)-$(v_pkgrel)) + $(error wrong version: $(v_upbase)+$(v_upbuild)-$(v_pkgrel) should be: $(v_debian)) + endif +else + v_upbase := $(word 1, $(subst ~, , $(v_upstream))) + v_upbuild := $(word 2, $(subst ~, , $(v_upstream))) + ifneq ($(v_debian),$(v_upbase)~$(v_upbuild)-$(v_pkgrel)) + $(error wrong version: $(v_upbase)~$(v_upbuild)-$(v_pkgrel) should be: $(v_debian)) + endif +endif + +ifneq (,$(DEB_HOST_MULTIARCH)) + jdirname = java-$(shortver)-$(origin)-$(DEB_HOST_ARCH) + jdiralias = java-$(jvmver)-$(origin)-$(DEB_HOST_ARCH) + basedir = $(TOP)/$(jdirname) + commonbasedir = $(TOP)/java-$(shortver)-$(origin)-common + commonbasedir = $(basedir) + etcdir = etc/java-$(shortver)-$(origin) + testsuitedir = $(basedir)/testsuite +else + jdirname = java-$(shortver)-$(origin) + jdiralias = java-$(jvmver)-$(origin) + basedir = $(TOP)/$(jdirname) + commonbasedir = $(TOP)/java-$(shortver)-$(origin) + etcdir = etc/$(jdirname) + testsuitedir = $(basedir)/testsuite +endif +security = $(etcdir)/security +ifeq ($(bootcycle_build),yes) + sdkimg = bootcycle-build/images/jdk + build_target = bootcycle-images test-image + testimg = images/test +else + sdkimg = images/jdk + build_target = images test-image + testimg = images/test +endif +ifeq ($(zbootcycle_build),yes) + zsdkimg = bootcycle-build/images/jdk + zbuild_target = bootcycle-images test-image +else + zsdkimg = images/jdk + zbuild_target = images test-image +endif + +# Support parallel=<n> in DEB_BUILD_OPTIONS (see #209008) +COMMA=, +SPACE = $(EMPTY) $(EMPTY) +ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) + NJOBS = $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) +endif + +jtreg_pkg = jtreg8 +testng_pkg = libtestng7-java + +with_check = $(if $(findstring nocheck, $(DEB_BUILD_OPTIONS)$(DEB_BUILD_PROFILES)),,yes) +ifneq (,$(filter $(DEB_HOST_ARCH), alpha arc armel mipsel mips64el powerpc riscv64 x32)) + with_check = disabled running check on $(DEB_HOST_ARCH) +endif +# no jtreg backport yet +ifneq (,$(filter $(distrel), precise trusty xenial bionic bookworm bullseye)) + with_check = disabled for $(distrel), no $(jtreg_pkg) +endif +#with_check = disabled, more recent jtreg needed + +with_docs = $(if $(findstring nodoc, $(DEB_BUILD_OPTIONS)),,yes) +ifneq (,$(filter $(distrel), precise trusty)) + with_docs = +endif +#with_check = disabled for this upload + +with_wqy_zenhai = $(if $(filter $(distrel),lenny),,yes) + +arch_map := alpha=alpha arc=arc arm=arm armel=arm armhf=arm arm64=aarch64 amd64=amd64 hppa=parisc i386=i586 loong64=loong64 m68k=m68k mips=mips mipsel=mipsel mips64=mips64 mips64el=mips64el powerpc=ppc ppc64=ppc64 ppc64el=ppc64le riscv64=riscv64 sparc=sparc sparc64=sparcv9 sh4=sh s390x=s390x ia64=ia64 x32=x32 + +jvmarch := $(strip $(patsubst $(DEB_HOST_ARCH_CPU)=%, %, \ + $(filter $(DEB_HOST_ARCH_CPU)=%, $(arch_map)))) +ifeq ($(DEB_HOST_ARCH),x32) + jvmarch := x32 +endif + +default_vm = $(if $(filter $(DEB_HOST_ARCH), $(hotspot_archs)),hotspot,zero) + +any_archs = alpha amd64 arc armel armhf arm64 i386 loong64 mips64el powerpc ppc64 ppc64el m68k riscv64 sh4 sparc sparc64 s390x x32 + +altzero_archs = $(hotspot_archs) +ifneq (,$(filter $(distrel),trusty)) + altzero_archs := $(filter-out arm64, $(altzero_archs)) +endif + +ifneq (,$(filter noaltzero, $(DEB_BUILD_OPTIONS))) + altzero_archs = +else ifneq (,$(filter $(DEB_HOST_ARCH), $(altzero_archs))) + alternate_vms += zero + zero_dir = zero +endif + +pandoc_archs := $(filter alpha amd64 arm64 armhf ppc64el riscv64 s390x sparc64, \ + $(any_archs)) +ifeq ($(derivative),Ubuntu) + pandoc_archs := $(filter-out i386, $(pandoc_archs)) +endif + +# needed for the jexec build +export DEBIAN_JDK_BASE_DIR := /$(basedir) + +BOOTJDK_HOME := $(strip $(subst /bin/javac,, $(firstword $(wildcard \ + /usr/lib/jvm/java-25-openjdk-$(DEB_BUILD_ARCH)/bin/javac \ + /usr/lib/jvm/java-24-openjdk-$(DEB_BUILD_ARCH)/bin/javac \ + )))) + +ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH)) + BUILDJDK_HOME = $(CURDIR)/$(builddir)/$(sdkimg) +else + BUILDJDK_HOME = $(BOOTJDK_HOME) +endif + +ifneq (,$(filter $(distrel),saucy)) + export CC = gcc-4.8 + export CXX = g++-4.8 + bd_gcc = g++-4.8, +else ifneq (,$(filter $(distrel),utopic vivid jessie)) + export CC = gcc-4.9 + export CXX = g++-4.9 + bd_gcc = g++-4.9, +else ifneq (,$(filter $(distrel),wily)) + ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs))) + export CC = $(DEB_HOST_GNU_TYPE)-gcc-5 + export CXX = $(DEB_HOST_GNU_TYPE)-g++-5 + # FIXME: altzero seems to build with GCC 5 on i386, amd64, ppc64el ... + ifneq (,$(filter $(DEB_HOST_ARCH), arm64)) + ZERO_CC = $(DEB_HOST_GNU_TYPE)-gcc-4.9 + ZERO_CXX = $(DEB_HOST_GNU_TYPE)-g++-4.9 + endif + else + export CC = $(DEB_HOST_GNU_TYPE)-gcc-4.9 + export CXX = $(DEB_HOST_GNU_TYPE)-g++-4.9 + endif + bd_gcc = g++-5 [$(hotspot_archs)], g++-4.9 [$(strip $(foreach a,$(hotspot_archs), !$(a)))], g++-4.9 [arm64], +else ifneq (,$(filter $(distrel),stretch)) + # FIXME: still hotspot core dumps with GCC 6 + export CC = $(DEB_HOST_GNU_TYPE)-gcc-6 + export CXX = $(DEB_HOST_GNU_TYPE)-g++-6 + bd_gcc = g++-6, +else ifneq (,$(filter $(distrel),artful)) + export CC = $(DEB_HOST_GNU_TYPE)-gcc-7 + export CXX = $(DEB_HOST_GNU_TYPE)-g++-7 + bd_gcc = g++-7, +else ifneq (,$(filter $(distrel),buster precise trusty xenial bionic cosmic disco)) + # FIXME: ftbfs on armhf with the default GCC + export CC = $(DEB_HOST_GNU_TYPE)-gcc-8 + export CXX = $(DEB_HOST_GNU_TYPE)-g++-8 + bd_gcc = g++-8, + ifneq (,$(filter $(distrel),buster bionic cosmic disco)) + bd_gcc = g++-8 <!cross>, + endif +else ifneq (,$(filter $(distrel),bullseye focal groovy hirsute)) + export CC = $(DEB_HOST_GNU_TYPE)-gcc-10 + export CXX = $(DEB_HOST_GNU_TYPE)-g++-10 + bd_gcc = g++-10 <!cross>, +else ifneq (,$(filter $(distrel),bookworm jammy kinetic lunar)) + export CC = $(DEB_HOST_GNU_TYPE)-gcc-12 + export CXX = $(DEB_HOST_GNU_TYPE)-g++-12 + bd_gcc = g++-12 <!cross>, +else ifneq (,$(filter $(distrel),mantic noble)) + export CC = $(DEB_HOST_GNU_TYPE)-gcc-13 + export CXX = $(DEB_HOST_GNU_TYPE)-g++-13 + bd_gcc = g++-13 <!cross>, +else ifneq (,$(filter $(distrel),trixie oracular plucky)) + export CC = $(DEB_HOST_GNU_TYPE)-gcc-14 + export CXX = $(DEB_HOST_GNU_TYPE)-g++-14 + bd_gcc = g++-14 <!cross>, +else + export CC = $(DEB_HOST_GNU_TYPE)-gcc-15 + export CXX = $(DEB_HOST_GNU_TYPE)-g++-15 + bd_gcc = g++-15 <!cross>, +endif + +# GCC 11 only +ifeq (,$(findstring 11, $(bd_gcc))) + DEB_BUILD_MAINT_OPTIONS = optimize=-lto +endif + +# for Hotspot: hotspot/make/linux/makefiles/vm.make +# Don't overwrite Hotspot opt level : +# -O3 is already default option for hotspot + +# FIXME: ftbfs with -Werror=format-security +dpkg_buildflags_hs = \ + DEB_BUILD_MAINT_OPTIONS="$(DEB_BUILD_MAINT_OPTIONS)" \ + DEB_CFLAGS_MAINT_STRIP="-O2 -Werror=format-security" \ + DEB_CXXFLAGS_MAINT_STRIP="-O2 -Werror=format-security" \ + DEB_CFLAGS_MAINT_APPEND="-fno-stack-protector -Wno-deprecated-declarations" \ + DEB_CXXFLAGS_MAINT_APPEND="-fno-stack-protector -Wno-deprecated-declarations$(if $(filter $(DEB_HOST_ARCH), armel armhf), -fpermissive)" \ + DEB_CFLAGS_MAINT_APPEND="$(if $(filter $(distrel), jammy), $(if $(filter $(DEB_HOST_ARCH), armel armhf), -DSTAP_SDT_ARG_CONSTRAINT=g))" +# jdk/make/CompileDemos.gmk (SetupJVMTIDemo) doesn't like commas in flags +dpkg_buildflags_hs += \ + DEB_LDFLAGS_MAINT_STRIP="-Wl,-z,relro -Wl,-Bsymbolic-functions" \ + DEB_LDFLAGS_MAINT_APPEND="-Xlinker -z -Xlinker relro -Xlinker -Bsymbolic-functions -Xlinker --no-as-needed" +dpkg_buildflags_hs += dpkg-buildflags +export EXTRA_CPPFLAGS_HS := $(shell $(dpkg_buildflags_hs) --get CPPFLAGS) +export EXTRA_CFLAGS_HS := $(shell $(dpkg_buildflags_hs) --get CFLAGS; $(dpkg_buildflags_hs) --get CPPFLAGS) +export EXTRA_CXXFLAGS_HS := $(shell $(dpkg_buildflags_hs) --get CXXFLAGS) -Wno-deprecated-declarations +export EXTRA_LDFLAGS_HS := $(shell $(dpkg_buildflags_hs) --get LDFLAGS) + +dpkg_buildflags_zero = \ + DEB_BUILD_MAINT_OPTIONS="$(DEB_BUILD_MAINT_OPTIONS)" \ + DEB_CFLAGS_MAINT_STRIP="-O2 -Werror=format-security -fstack-protector -fstack-protector-strong" \ + DEB_CXXFLAGS_MAINT_STRIP="-O2 -Werror=format-security -fstack-protector -fstack-protector-strong" \ + DEB_CFLAGS_MAINT_APPEND="-fno-stack-protector -Wno-deprecated-declarations" \ + DEB_CXXFLAGS_MAINT_APPEND="-fno-stack-protector -Wno-deprecated-declarations" \ + DEB_CFLAGS_MAINT_APPEND="$(if $(filter $(distrel), jammy), $(if $(filter $(DEB_HOST_ARCH), armel armhf), -DSTAP_SDT_ARG_CONSTRAINT=g))" +# jdk/make/CompileDemos.gmk (SetupJVMTIDemo) doesn't like commas in flags +dpkg_buildflags_zero += \ + DEB_LDFLAGS_MAINT_STRIP="-Wl,-z,relro -Wl,-Bsymbolic-functions" \ + DEB_LDFLAGS_MAINT_APPEND="-Xlinker -z -Xlinker relro -Xlinker -Bsymbolic-functions -Xlinker --no-as-needed" +dpkg_buildflags_zero += dpkg-buildflags +export EXTRA_CPPFLAGS_ZERO := $(shell $(dpkg_buildflags_zero) --get CPPFLAGS) +export EXTRA_CFLAGS_ZERO := $(shell $(dpkg_buildflags_zero) --get CFLAGS; $(dpkg_buildflags_zero) --get CPPFLAGS) +export EXTRA_CXXFLAGS_ZERO := $(shell $(dpkg_buildflags_zero) --get CXXFLAGS) +export EXTRA_LDFLAGS_ZERO := $(shell $(dpkg_buildflags_zero) --get LDFLAGS) + +ifeq ($(DEB_HOST_ARCH),alpha) + export EXTRA_LDFLAGS_ZERO += -Wl,--no-relax +endif + +ifneq (,$(filter $(distrel),squeeze lucid)) + with_bridge = bridge + with_jni_bridge = yes +else + with_bridge = atk +endif + +with_nss = yes + +on_buildd := $(shell [ -f /CurrentlyBuilding -o "$$LOGNAME" = buildd ] && echo yes) + +CONFIGURE_ARGS = + +# there are problems --with-alt-jar=/usr/bin/fastjar, +# see http://icedtea.classpath.org/bugzilla/show_bug.cgi?id=217 +# only use it for zero ports except powerpc (which we assume as +# fast enough to build. +ifeq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs) ia64 powerpc)) + CONFIGURE_ARGS += --with-alt-jar=/usr/bin/fastjar +endif + +ifeq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs))) + CONFIGURE_ARGS += --enable-zero +endif + +ifeq (,$(filter $(DEB_BUILD_OPTIONS), terse)) + #EXTRA_BUILD_ENV += MAKE_VERBOSE=y QUIETLY= LOG=debug + EXTRA_BUILD_ENV += MAKE_VERBOSE=y QUIETLY= LOG=info,cmdlines +endif + +# timestamp skew on kFreeBSD +EXTRA_BUILD_ENV += IGNORE_OLD_CONFIG=true + +EXTRA_BUILD_ENV += LIBFFI_LIBS=-lffi_pic + +EXTRA_BUILD_ENV += JOBS=$(NJOBS) + +ifeq ($(derivative),Ubuntu) + ifeq ($(DEB_HOST_ARCH),s390x) + ifneq (,$(filter $(distrel), trusty xenial bionic eoan focal)) + export VENDOR_FLAGS_CPU = -march=zEC12 + else + export VENDOR_FLAGS_CPU = -march=z13 -mtune=z15 + endif + endif +endif + +CONFIGURE_ARGS += --enable-system-kerberos + +ifeq ($(with_nss),yes) + CONFIGURE_ARGS += --enable-nss +else ifeq ($(with_nss),no) + CONFIGURE_ARGS += --disable-nss +endif + +COMMON_CONFIGURE_ARGS = +DEFAULT_CONFIGURE_ARGS = +ZERO_CONFIGURE_ARGS = + +no_dtrace_archs = powerpc ppc64 ppc64el sh4 s390x + +# PPC*, S390x and SH do not support dtrace probes +# https://github.com/openjdk/jdk/pull/13228 +ifeq (,$(filter $(DEB_HOST_ARCH),$(no_dtrace_archs))) + # disable dtrace due to GCC ICE in jammy: https://launchpad.net/bugs/2091225 + ifneq (,$(filter $(DEB_HOST_ARCH),armhf)) + ifneq (,$(filter $(distrel),jammy)) + COMMON_CONFIGURE_ARGS += --disable-dtrace + else + COMMON_CONFIGURE_ARGS += --enable-dtrace + endif + else + COMMON_CONFIGURE_ARGS += --enable-dtrace + endif +endif + +COMMON_CONFIGURE_ARGS += --with-jni-libpath=/usr/lib/$(DEB_HOST_MULTIARCH)/jni:/lib/$(DEB_HOST_MULTIARCH):/usr/lib/$(DEB_HOST_MULTIARCH):/usr/lib/jni:/lib:/usr/lib + +# FIXME: --with-jvm-variants=server,zero not supported upstream +ifneq (,$(filter $(DEB_HOST_ARCH),$(hotspot_archs))) + ifneq (,$(filter $(DEB_HOST_ARCH),i386)) + DEFAULT_CONFIGURE_ARGS += --with-jvm-variants=client,server + else + DEFAULT_CONFIGURE_ARGS += --with-jvm-variants=server + endif +else + DEFAULT_CONFIGURE_ARGS += --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) + DEFAULT_CONFIGURE_ARGS += --with-jvm-variants=zero +endif +ZERO_CONFIGURE_ARGS += --with-jvm-variants=zero + +DEFAULT_CONFIGURE_ARGS += --with-boot-jdk=$(BOOTJDK_HOME) +ZERO_CONFIGURE_ARGS += --with-boot-jdk=$(BUILDJDK_HOME) + +COMMON_CONFIGURE_ARGS += --disable-ccache + +# FIXME: zero not ready for --disable-precompiled-headers +COMMON_CONFIGURE_ARGS += --disable-precompiled-headers +ifneq (,$(filter $(DEB_HOST_ARCH),$(hotspot_archs))) + DEFAULT_CONFIGURE_ARGS += --disable-precompiled-headers +endif + +ifneq (,$(filter $(DEB_HOST_ARCH), alpha ppc64 ppc64el powerpc s390x sparc64)) + ifeq ($(derivative)-$(DEB_HOST_ARCH),Ubuntu-s390x) + # Disable C2 compiler to workaround launchpad build chroot issue + COMMON_CONFIGURE_ARGS += \ + --with-boot-jdk-jvmargs="-XX:TieredStopAtLevel=1 -XX:ThreadStackSize=2240 -Xss4M" + else + COMMON_CONFIGURE_ARGS += \ + --with-boot-jdk-jvmargs="-XX:ThreadStackSize=2240 -Xss4M" + endif +endif + +ifeq ($(with_check),yes) + COMMON_CONFIGURE_ARGS += --with-jtreg=/usr/share/jtreg +else + COMMON_CONFIGURE_ARGS += --without-jtreg --disable-jtreg-failure-handler +endif + +# openjdk provides java.lang.foreign.Linker implementation for +# amd64 arm64 ppc64el riscv64 s390x. Other architectures use +# a libffi-based linker. +ifeq (,$(filter $(DEB_HOST_ARCH), amd64 arm64 ppc64el riscv64 s390x)) + COMMON_CONFIGURE_ARGS += --enable-fallback-linker +endif + +COMMON_CONFIGURE_ARGS += --disable-warnings-as-errors + +ifneq (,$(filter $(DEB_HOST_ARCH),$(hotspot_archs))) + ifneq (,$(filter $(DEB_HOST_ARCH), amd64)) + jvm_features = zgc + endif + # not needed explicitly? + #jvm_features += shenandoahgc + DEFAULT_CONFIGURE_ARGS += --with-jvm-features=$(subst $(SPACE),$(COMMA),$(strip $(jvm_features))) +endif + +# enable hotspot disassembler +enable_hsdis = +ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs))) + # binutils-dev 2.42 is the first binutils having libopcodes_pic.a and libbfd_pic.a + ifeq (,$(filter $(distrel), precise trusty xenial bionic focal jammy mantic bookworm bullseye)) + # keep it off for licensing reasons. binutils is GPLv3+ + #enable_hsdis = yes + endif +endif + +ifeq ($(enable_hsdis),yes) + DEFAULT_CONFIGURE_ARGS += --with-hsdis=binutils --with-binutils=system --enable-hsdis-bundling +endif + +vendor := $(shell dpkg-vendor --query Vendor) +ifeq ($(vendor),Debian) + vendor_url = https://tracker.debian.org/pkg/$(basename) + vendor_bugs = https://bugs.debian.org/src:$(basename) +else ifeq ($(vendor),Ubuntu) + vendor_url = https://launchpad.net/ubuntu/+source/$(basename) + vendor_bugs = https://bugs.launchpad.net/ubuntu/+source/$(basename) +else + vendor_url = $(shell dpkg-vendor --query Vendor-URL) + vendor_bugs = $(shell dpkg-vendor --query Bugs) +endif + +ifneq (,$(vendor)) + COMMON_CONFIGURE_ARGS += \ + --with-vendor-name='$(vendor)' \ + --with-vendor-url='$(vendor_url)' \ + --with-vendor-bug-url='$(vendor_bugs)' \ + --with-vendor-vm-bug-url='$(vendor_bugs)' +endif + +# not sure if this is a good idea, might change parsing of java -version +#COMMON_CONFIGURE_ARGS += \ +# --with-vendor-version-string='$(PKGVERSION)' + +ifeq ($(distribution),Debian) + COMMON_CONFIGURE_ARGS += \ + --with-vendor-name='$(distribution)' \ + --with-vendor-url='https://tracker.debian.org/$(basename)' \ + --with-vendor-bug-url='https://bugs.debian.org/$(basename)' \ + --with-vendor-vm-bug-url='https://bugs.debian.org/$(basename)' +else ifeq ($(distribution),Ubuntu) + ppa_build := $(shell if echo '$(v_pkgrel)' | egrep '^[0-9]+(ubuntu[0-9]+)?(~[0-9.]+)?$$'; then echo no; else echo yes; fi) + ifeq ($(ppa_build),yes) + COMMON_CONFIGURE_ARGS += \ + --with-vendor-name='Private Build' \ + --with-vendor-url='Unknown' \ + --with-vendor-bug-url='Unknown' \ + --with-vendor-vm-bug-url='Unknown' + else + COMMON_CONFIGURE_ARGS += \ + --with-vendor-name='$(distribution)' \ + --with-vendor-url='https://ubuntu.com/' \ + --with-vendor-bug-url='https://bugs.launchpad.net/ubuntu/+source/$(basename)' \ + --with-vendor-vm-bug-url='https://bugs.launchpad.net/ubuntu/+source/$(basename)' + endif +else + COMMON_CONFIGURE_ARGS += \ + --with-vendor-name='$(distribution)' \ + --with-vendor-url='Unknown' \ + --with-vendor-bug-url='Unknown' \ + --with-vendor-vm-bug-url='Unknown' +endif + +v_pkgrel_opt := $(subst ~,-,$(v_pkgrel)) + +COMMON_CONFIGURE_ARGS += \ + --with-version-pre='$(if $(filter yes, $(is_upstream_release)),,ea)' \ + --with-version-build='$(v_upbuild)' \ + --with-version-opt='$(v_pkgrel_opt)-$(distribution)' \ + --with-copyright-year=$(PKGYEAR) \ + +COMMON_CONFIGURE_ARGS += \ + --with-debug-level=release \ + --with-native-debug-symbols=external \ + --enable-unlimited-crypto \ + --with-zlib=system \ + --with-giflib=system \ + --with-libpng=system \ + --with-libjpeg=system \ + --with-lcms=system \ + --with-pcsclite=system \ + --disable-warnings-as-errors \ + --disable-javac-server \ + --with-gtest=$(CURDIR)/googletest \ + +ifeq (,$(filter $(distrel),jessie stretch precise trusty xenial)) + COMMON_CONFIGURE_ARGS += \ + --with-harfbuzz=system + with_system_hb = yes +endif + +ifneq (,$(filter $(distrel),precise trusty xenial)) + # building with a GCC from a PPA ... + COMMON_CONFIGURE_ARGS += \ + --with-stdc++lib=static +else ifneq (,$(filter $(DEB_HOST_ARCH), ia64)) + # seen in 2023 on ia64: + # /usr/bin/ld: jvm-test-launcher: no symbol version section for versioned symbol `__cxa_pure_virtual@CXXABI_1.3' + # works when linking statically + COMMON_CONFIGURE_ARGS += \ + --with-stdc++lib=static +else + COMMON_CONFIGURE_ARGS += \ + --with-stdc++lib=dynamic +endif + +ifneq (,$(NJOBS)) + COMMON_CONFIGURE_ARGS += --with-num-cores=$(NJOBS) +endif + +# FIXME: upstream says the extra flags are not designed for general purpose ... +# http://mail.openjdk.java.net/pipermail/jdk8u-dev/2014-July/001389.html + +# FIXME: demos fail to build with these ... +# FIXME: zero ftbfs without -fpermissive +#src/cpu/zero/vm/cppInterpreter_zero.cpp:732:30: error: invalid conversion from 'intptr_t {aka long int}' to 'const void*' [-fpermissive] +# object = (oop) locals[0]; +# ^ + +#COMMON_CONFIGURE_ARGS += \ + --with-extra-cflags='$(EXTRA_CPPFLAGS_HS) $(EXTRA_CFLAGS_HS)' \ + --with-extra-cxxflags='$(EXTRA_CPPFLAGS_HS) $(EXTRA_CXXFLAGS_HS)' \ + --with-extra-ldflags='$(EXTRA_LDFLAGS_HS)' + +ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs))) + DEFAULT_CONFIGURE_ARGS += \ + --with-extra-cflags='$(EXTRA_CPPFLAGS_HS) $(EXTRA_CFLAGS_HS)' \ + --with-extra-cxxflags='$(EXTRA_CPPFLAGS_HS) $(EXTRA_CXXFLAGS_HS)' \ + --with-extra-ldflags='$(EXTRA_LDFLAGS_HS)' +else + DEFAULT_CONFIGURE_ARGS += \ + --with-extra-cflags='$(EXTRA_CPPFLAGS_ZERO) $(EXTRA_CFLAGS_ZERO)' \ + --with-extra-cxxflags='$(EXTRA_CPPFLAGS_ZERO) $(EXTRA_CXXFLAGS_ZERO)' \ + --with-extra-ldflags='$(EXTRA_LDFLAGS_ZERO)' +endif + +ZERO_CONFIGURE_ARGS += \ + --with-extra-cflags='$(EXTRA_CPPFLAGS_ZERO) $(EXTRA_CFLAGS_ZERO)' \ + --with-extra-cxxflags='$(EXTRA_CPPFLAGS_ZERO) $(EXTRA_CXXFLAGS_ZERO)' \ + --with-extra-ldflags='$(EXTRA_LDFLAGS_ZERO)' + +ifneq ($(DEB_HOST_ARCH),$(DEB_BUILD_ARCH)) + COMMON_CONFIGURE_ARGS += \ + --build=$(DEB_BUILD_GNU_TYPE) \ + --host=$(DEB_HOST_GNU_TYPE) \ + --target=$(DEB_HOST_GNU_TYPE) \ + BUILD_CC=$(subst $(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE),$(CC)) \ + BUILD_LD=$(subst $(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE),$(CC)) \ + BUILD_CXX=$(subst $(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE),$(CXX)) \ + +endif + +# (most) jre and jdk tools handled by the alternatives system. +# dups in heimdal-clients, krb5-user: kinit, klist, ktab, no alternatives +# have jrunscript in the jdk packages + +all_tools = jar jarsigner java javac javadoc javap jcmd \ + jconsole jdb jdeprscan jdeps jfr jimage jinfo jlink jmap jnativescan \ + jmod jpackage jps jrunscript jshell jstack jstat jstatd jwebserver \ + keytool rmiregistry serialver + +jdk_hl_tools = jar jarsigner javac javadoc javap jcmd jdb \ + jdeprscan jdeps jfr jimage jinfo jlink jmap jmod jnativescan jps \ + jrunscript jshell jstack jstat jstatd jwebserver serialver +ifeq (,$(filter $(DEB_HOST_ARCH), alpha armel armhf ia64 loong64 m68k mips mipsel mips64el powerpc s390x sh4 sparc64 x32 i386)) + all_tools += jhsdb + jdk_hl_tools += jhsdb +endif + +ifeq ($(DEB_HOST_ARCH),armhf) + ifneq (,$(filter armhf,$(hotspot_archs))) + all_tools += jhsdb + jdk_hl_tools += jhsdb + endif +endif + +jdk_tools = jconsole + +all_jre_tools = $(filter-out $(jdk_hl_tools) $(jdk_tools), $(all_tools)) +# no tools in $(p_jre) +jre_tools = +jre_hl_tools := $(filter-out $(jre_tools), $(all_jre_tools)) + +# build dependencies +ifneq (,$(filter $(distrel),precise)) + bd_bootstrap = openjdk-24-jdk-headless | openjdk-25-jdk-headless, +else ifneq (,$(filter $(distrel),squeeze wheezy jessie trusty xenial)) + bd_bootstrap = openjdk-24-jdk-headless:native | openjdk-25-jdk-headless:native, +else ifneq (,$(filter $(distrel),trixie)) + bd_bootstrap = openjdk-25-jdk-headless:native | openjdk-24-jdk-headless:native, +else + bd_bootstrap = openjdk-25-jdk-headless:native | openjdk-24-jdk-headless:native, +endif + +ifeq (,$(filter $(distrel),squeeze wheezy jessie precise trusty xenial)) + bd_cross += \ + $(basename)-jdk-headless <cross>, +else + bd_cross += \ + file, +endif + +ifneq (,$(filter $(distrel),squeeze wheezy jessie precise trusty)) + old_debhelper = veryold + bd_debhelper = debhelper (>= 9), +else ifneq (,$(filter $(distrel), stretch xenial)) + old_debhelper = old + bd_debhelper = debhelper (>= 9.20141010), dpkg-dev (>= 1.17.14), +else + bd_debhelper = debhelper (>= 11), +endif + +ifneq (,$(filter $(distrel),precise)) + bd_autotools = autoconf2.69, automake, autotools-dev, +else ifneq (,$(filter $(old_debhelper), old veryold)) + bd_autotools = autoconf, automake, autotools-dev, +else + bd_autotools = autoconf, automake, +endif + +ifneq (,$(filter $(distrel),precise)) + bd_syslibs = zlib1g-dev, libattr1-dev, +else + bd_syslibs = zlib1g-dev:native, zlib1g-dev, libattr1-dev, +endif +ifneq (,$(filter $(distrel),squeeze lucid)) + bd_syslibs += libpng12-dev, libjpeg62-dev, +else ifneq (,$(filter $(distrel),wheezy precise quantal raring saucy)) + bd_syslibs += libpng-dev, libjpeg8-dev, +else + bd_syslibs += libpng-dev, libjpeg-dev, +endif +bd_syslibs += \ + libgif-dev, +bd_openjdk = \ + libxtst-dev, libxi-dev, libxt-dev, libxaw7-dev, libxrender-dev, libcups2-dev, \ + libasound2-dev, liblcms2-dev, \ + libxinerama-dev, libkrb5-dev, xsltproc, libpcsclite-dev, libxrandr-dev, \ + libelf-dev, +ifeq ($(enable_hsdis),yes) + bd_openjdk += binutils-dev, libiberty-dev, +endif +# not needed? +#bd_openjdk += libgtk-3-0, +#bd_openjdk += libgtk-3-0t64, +ifneq (,$(filter $(distrel),jessie stretch buster precise trusty xenial bionic focal)) + bd_openjdk += libfontconfig1-dev, +else + bd_openjdk += libfontconfig-dev, +endif +ifneq (,$(filter $(distrel),jessie stretch buster precise trusty xenial bionic)) + bd_openjdk += libfreetype6-dev, +else + bd_openjdk += libfreetype-dev, +endif +ifeq ($(with_system_hb),yes) + bd_openjdk += libharfbuzz-dev, +endif + +ifeq (,$(filter $(distrel),precise)) + bd_zero = libffi-dev, libffi-dev:native, +else + bd_zero = libffi-dev, +endif + +bd_ant = ant, ant-optional, + +bd_fastjar = fastjar (>= 2:0.96-0ubuntu2), + +ifneq (,$(filter $(distrel), wheezy jessie stretch buster bullseye bionic focal jammy)) + bd_pkgconf = pkg-config, +else + bd_pkgconf = pkgconf, +endif + +ifeq ($(with_nss),yes) + ifneq (,$(filter $(distrel),squeeze lucid precise quantal)) + bd_nss = libnss3-dev (>= 3.12.3), + else ifneq (,$(filter $(distrel),wheezy raring saucy trusty)) + bd_nss = libnss3-dev (>= 2:3.12.3), + else + bd_nss = libnss3-dev (>= 2:3.17.1), + endif +endif +bd_systemtap = systemtap-sdt-dev [$(foreach a,$(no_dtrace_archs),!$(a))], + +ifeq (,$(filter $(distrel),jessie stretch buster precise trusty xenial bionic focal groovy)) + with_debugedit = yes + bd_debugedit = debugedit (>= 4.16), + build_id_seed = $(PKGSOURCE)-$(PKGVERSION) +endif + +ifeq (,$(filter $(distrel),jessie stretch buster precise trusty xenial bionic)) + bd_strip_ndt = strip-nondeterminism, +endif + +ifeq (,$(filter $(distrel),precise)) + nocheck_profile = $(EMPTY) <!nocheck> +endif + +# look at all TEST.ROOT for the required jtreg version, sorted by newest +min_jtreg_version := $(shell find test/ -name TEST.ROOT -exec grep -hr "^requiredVersion=" {} \; | sed -e 's:^requiredVersion=::' -e 's:$$:~:' | sort -uVr | head -n1 | tr ' ' '-') + +jtreg_dep := $(jtreg_pkg) (>= $(min_jtreg_version)) +testng_dep := $(testng_pkg) + +ifeq ($(with_check),yes) + bd_check = \ + $(jtreg_dep)$(nocheck_profile), $(testng_dep)$(nocheck_profile), \ + xvfb$(nocheck_profile), xauth$(nocheck_profile), \ + xfonts-base$(nocheck_profile), libgl1-mesa-dri [!x32]$(nocheck_profile), \ + xfwm4$(nocheck_profile), x11-xkb-utils$(nocheck_profile), \ + dbus-daemon$(nocheck_profile), libasmtools-java$(nocheck_profile), \ + xvfb $(nocheck_profile), +else + bd_check = file, +endif + +dlopen_hl_depends = +dlopen_hl_recommends = + +ifeq (,$(filter $(distrel),squeeze wheezy jessie stretch buster bullseye bookworm lucid precise trusty xenial bionic focal jammy lunar mantic)) + t64_suffix = t64 +endif +dlopen_hl_recommends += libcups2$(t64_suffix), +dlopen_hl_depends += liblcms2-2, + +ifeq ($(derivative),Ubuntu) + ifneq (,$(filter $(distrel),lucid)) + dlopen_hl_depends += libjpeg62, + else + dlopen_hl_depends += libjpeg8, + endif +else + ifneq (,$(filter $(distrel),squeeze)) + dlopen_hl_depends += libjpeg62, + else + dlopen_hl_depends += libjpeg62-turbo, + endif +endif +dlopen_hl_recommends += libfontconfig1, +ifneq ($(with_nss),no) + ifneq (,$(filter $(distrel),squeeze lucid precise)) + dlopen_hl_depends += , libnss3-1d (>= 3.12.3) + else ifneq (,$(filter $(distrel),wheezy quantal raring saucy trusty)) + dlopen_hl_depends += , libnss3 (>= 2:3.12.3) + else + dlopen_hl_depends += , libnss3 (>= 2:3.17.1) + endif +endif + +dlopen_jre_depends = +dlopen_jre_recommends = +dlopen_jre_depends += libglib2.0-0$(t64_suffix), +dlopen_jre_depends += libgtk-3-0$(t64_suffix), +dlopen_jre_depends += libxrandr2, libxinerama1, +ifneq (,$(filter $(distrel),squeeze wheezy jessie stretch lucid precise xenial)) + dlopen_jre_depends += libgl1-mesa-glx | libgl1, +else + dlopen_jre_depends += libgl1, +endif +ifeq ($(with_system_hb),yes) + dlopen_jre_depends += libharfbuzz0b, +endif +ifeq (,$(findstring libcups, $(dlopen_hl_depends))) + dlopen_jre_depends += libcups2$(t64_suffix), +endif +ifeq (,$(findstring libfontconfig, $(dlopen_hl_depends))) + dlopen_jre_depends += libfontconfig1, +endif + +# .desktop files need to be multiarch installable +java_launcher = /$(basedir)/bin/java +java_launcher = /usr/bin/java +ifeq ($(derivative),Ubuntu) + java_launcher = cautious-launcher %f /$(basedir)/bin/java + java_launcher = cautious-launcher %f /usr/bin/java +endif + +ifneq (,$(filter $(distrel),squeeze wheezy lucid precise quantal raring)) + core_fonts = ttf-dejavu-extra +else + core_fonts = fonts-dejavu-extra +endif +ifneq (,$(filter $(distrel),squeeze lucid)) + cjk_fonts = ttf-baekmuk | ttf-unfonts | ttf-unfonts-core, + cjk_fonts += ttf-sazanami-gothic | ttf-kochi-gothic, + cjk_fonts += ttf-sazanami-mincho | ttf-kochi-mincho, +else + cfk_fonts = fonts-nanum, + cjk_fonts += fonts-ipafont-gothic, fonts-ipafont-mincho, +endif +cjk_fonts += $(if $(with_wqy_zenhai),fonts-wqy-microhei | fonts-wqy-zenhei,fonts-arphic-uming), +ifneq (,$(filter $(distrel),squeeze wheezy)) + cjk_fonts += ttf-indic-fonts, +else ifneq (,$(filter $(distrel), lucid maverick natty oneiric precise quantal raring saucy trusty)) + cjk_fonts += ttf-indic-fonts-core, ttf-telugu-fonts, ttf-oriya-fonts, + cjk_fonts += ttf-kannada-fonts, ttf-bengali-fonts, +else + cjk_fonts += fonts-indic, +endif + +p_jre = $(basename)-jre +p_jrehl = $(basename)-jre-headless +p_jrez = $(basename)-jre-zero +p_jdkhl = $(basename)-jdk-headless +p_jdk = $(basename)-jdk +p_demo = $(basename)-demo +p_src = $(basename)-source +p_doc = $(basename)-doc +p_dbg = $(basename)-dbg +p_test = $(basename)-testsupport + +d = debian/tmp +d_jre = debian/$(p_jre) +d_jrehl = debian/$(p_jrehl) +d_jrez = debian/$(p_jrez) +d_jdkhl = debian/$(p_jdkhl) +d_jdk = debian/$(p_jdk) +d_demo = debian/$(p_demo) +d_src = debian/$(p_src) +d_doc = debian/$(p_doc) +d_dbg = debian/$(p_dbg) +d_test = debian/$(p_test) + +control_vars = \ + '-Vvm:Name=$(vm_name)' \ + '-Vvm:Version=$(shortver)' \ + '-Vdlopenhl:Depends=$(dlopen_hl_depends)' \ + '-Vdlopenhl:Recommends=$(dlopen_hl_recommends)' \ + '-Vdlopenjre:Depends=$(dlopen_jre_depends)' \ + '-Vdlopenjre:Recommends=$(dlopen_jre_recommends)' \ + +ifeq ($(with_bridge),atk) + control_vars += '-Vbridge:Recommends=libatk-wrapper-java-jni (>= 0.30.4-0ubuntu2)' +else ifeq ($(with_bridge),yes) + ifneq (,$(DEB_HOST_MULTIARCH)) + control_vars += '-Vbridge:Recommends=libaccess-bridge-java-jni (>= 1.26.2-6)' + else ifeq ($(with_jni_bridge),yes) + control_vars += '-Vbridge:Recommends=libaccess-bridge-java-jni' + else + control_vars += '-Vbridge:Recommends=libaccess-bridge-java' + endif +endif + +ifeq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs))) + control_vars += '-Vdefaultvm:Provides=$(p_jre)-zero' +endif + +pkg_certs = ca-certificates-java +ifneq (,$(filter $(distrel), squeeze wheezy jessie stretch precise trusty xenial bionic cosmic disco)) + control_vars += '-Vcacert:Depends=$(pkg_certs)' +else + control_vars += '-Vcacert:Depends=$(pkg_certs) (>= 20190405~)' +endif + +ifneq (,$(filter $(distrel), squeeze wheezy jessie lucid precise quantal raring saucy trusty utopic vivid)) + control_vars += '-Vmountpoint:Depends=initscripts' +else + control_vars += '-Vmountpoint:Depends=util-linux (>= 2.26.2-4)' +endif + +pkg_jcommon = java-common (>= 0.28) +control_vars += '-Vjcommon:Depends=$(pkg_jcommon)' + +ifneq ($(with_debugedit),yes) + control_vars += '-Vdbg:Conflicts=openjdk-11-dbg, openjdk-12-dbg, openjdk-13-dbg, openjdk-14-dbg, openjdk-15-dbg, openjdk-16-dbg' +endif + +debian/control: debian/control.in debian/tests/control gen-autopkgtests debian/watch + @cp -p debian/control debian/control.old + sed \ + -e 's/@basename@/$(basename)/g' \ + -e 's/@bd_autotools@/$(bd_autotools)/g' \ + -e 's/@bd_bootstrap@/$(strip $(bd_bootstrap))/g' \ + -e 's/@bd_cross@/$(strip $(bd_cross))/g' \ + -e 's/@bd_debhelper@/$(strip $(bd_debhelper))/g' \ + -e 's/@bd_openjdk@/$(bd_openjdk)/g' \ + -e 's/@bd_zero@/$(bd_zero)/g' \ + -e 's/@bd_gcc@/$(bd_gcc)/g' \ + -e 's/@bd_syslibs@/$(bd_syslibs)/g' \ + -e 's/@bd_pkgconf@/$(bd_pkgconf)/g' \ + -e 's/@bd_fastjar@/$(bd_fastjar)/g' \ + -e 's/@bd_nss@/$(bd_nss)/g' \ + -e 's/@bd_systemtap@/$(bd_systemtap)/g' \ + -e 's/@bd_ant@/$(bd_ant)/g' \ + -e 's/@bd_debugedit@/$(bd_debugedit)/g' \ + -e 's/@bd_strip_ndt@/$(bd_strip_ndt)/g' \ + -e 's/@bd_check@/$(bd_check)/g' \ + -e 's/@jtreg_dep@/$(jtreg_dep)/g' \ + -e 's/@testng_dep@/$(testng_dep)/g' \ + -e 's/@core_fonts@/$(core_fonts)/g' \ + -e 's/@cjk_fonts@/$(cjk_fonts)/g' \ + -e 's/@any_archs@/$(any_archs)/g' \ + -e 's/@hotspot_archs@/$(hotspot_archs)/g' \ + -e 's/@altzero_archs@/$(altzero_archs)/g' \ + -e 's/@pandoc_archs@/$(pandoc_archs)/g' \ + debian/control.in \ + $(if $(altzero_archs), debian/control.zero-jre) \ + $(if $(DEB_HOST_MULTIARCH),,| grep -v '^Multi-Arch') \ + > debian/control + sed -i 's/[[:blank:]]*$$//' debian/control + @if cmp -s debian/control debian/control.old; then \ + rm -f debian/control.old; \ + else \ + diff -u debian/control.old debian/control | wdiff -d -; \ + echo "debian/control did change, please restart the build. Run make -f debian/rules update-control-files to update packaging sources."; \ + rm -f debian/control.old; \ + exit 1; \ + fi + +debian/tests/control: debian/tests/control.in + cp -p $@ $@.old + sed \ + -e 's/@jtreg_dep@/$(jtreg_dep)/g' \ + -e 's/@testng_dep@/$(testng_dep)/g' \ + -e 's/@basename@/$(basename)/g' \ + -e 's/@jtreg_archs@/$(jtreg_archs)/g' \ + $< > $@; + @if cmp -s $@ $@.old; then \ + rm -f $@.old; \ + else \ + diff -u $@.old $@ | wdiff -d -; \ + echo "$@ did change, please restart the build. Run make -f debian/rules update-control-files to update packaging sources."; \ + rm -f $@.old; \ + exit 1; \ + fi + +debian/tests/%.sh: debian/tests/%.in + cp -p $@ $@.old + sed \ + -e 's/@basename@/$(basename)/g' \ + -e 's,@JDK_DIR@,/$(basedir),g' \ + -e 's,@jtreg_pkg@,$(jtreg_pkg),g' \ + -e 's/@jtreg_archs@/$(jtreg_archs)/g' \ + -e 's:@doc_dir@:/usr/share/doc/$(p_jrehl)/:g' \ + $< > $@; + chmod +x $@ + @if cmp -s $@ $@.old; then \ + rm -f $@.old; \ + else \ + diff -u $@.old $@ | wdiff -d -; \ + echo "$@ did change, please restart the build. Run make -f debian/rules update-control-files to update packaging sources."; \ + rm -f $@.old; \ + exit 1; \ + fi + +gen-autopkgtests: debian/tests/jtdiff-autopkgtest.sh \ + debian/tests/jtreg-autopkgtest.sh \ + debian/tests/jdk-autopkgtest.sh \ + debian/tests/hotspot-autopkgtest.sh \ + debian/tests/dependencies.sh \ + debian/tests/write-problems.sh + +packaging-files: + for f in debian/*.in; do \ + case "$$f" in debian/control.in|debian/watch.in) continue; esac; \ + f2=$$(echo $$f | sed 's/JB/$(basename)/;s/\.in$$//'); \ + sed -e 's/@JRE@/$(p_jre)/g' \ + -e 's/@JDK@/$(p_jdk)/g' \ + -e 's/@vendor@/$(Vendor)/g' \ + -e 's/@RELEASE@/$(shortver)/g' \ + -e 's/@basename@/$(basename)/g' \ + -e 's,@TOP@,$(TOP),g' \ + -e 's,@basedir@,$(basedir),g' \ + -e 's,@etcdir@,$(etcdir),g' \ + -e 's,@jdiralias@,$(jdiralias),g' \ + -e 's,@jdirname@,$(jdirname),g' \ + -e 's/@srcname@/$(srcname)/g' \ + -e 's/@jvmarch@/$(jvmarch)/g' \ + -e 's/@tag@/$(tag)/g' \ + -e 's/@priority@/$(priority)/g' \ + -e 's/@mantag@/$(mantag)/g' \ + -e 's/@multiarch@/$(DEB_HOST_MULTIARCH)/g' \ + -e 's/@jre_hl_tools@/$(jre_hl_tools)/g' \ + -e 's/@jre_tools@/$(jre_tools)/g' \ + -e 's/@jdk_hl_tools@/$(jdk_hl_tools)/g' \ + -e 's/@jdk_tools@/$(jdk_tools)/g' \ + -e 's/@corba_tools@/$(corba_tools)/g' \ + -e 's,@j2se_lib@,$(j2se_lib),g' \ + -e 's,@j2se_share@,$(j2se_share),g' \ + -e 's,@java_launcher@,$(java_launcher),g' \ + -e 's/@cjk_fonts@/$(cjk_fonts)/g' \ + $$f > $$f2; \ + done + +configure: stamps/configure +stamps/configure: stamps/unpack + @echo '========== $@ ==========' + @echo "Build options: $(DEB_BUILD_OPTIONS), Processors: $$(nproc)" + @echo '========== $@ ==========' + -cat /proc/meminfo |egrep '^(Mem|Swap)' + @echo '========== $@ ==========' + -cat /etc/hosts + @echo '========== $@ ==========' + -cat /etc/fstab + @echo '========== $@ ==========' + -cat /etc/mtab + @echo '========== $@ ==========' + -cat /proc/mounts + @echo '========== $@ ==========' + + mkdir -p bin +ifeq (0,1) +ifeq (,$(filter $(DEB_HOST_ARCH), alpha arc amd64 arm64 hppa ia64 loong64 m68k mips64 mips64el ppc64 ppc64el s390x sparc64 x32)) + ( \ + echo '#! /bin/sh'; \ + echo 'if [ -x /usr/bin/linux32 ]; then'; \ + echo ' exec /usr/bin/linux32 /bin/uname "$$@"'; \ + echo 'else'; \ + echo ' exec /bin/uname "$$@"'; \ + echo 'fi'; \ + ) > bin/uname + chmod +x bin/uname + echo "UNAME checks" + uname -a +endif +endif +ifneq (,$(filter $(distrel),precise)) + for i in autoreconf autoheader autoupdate autoscan autom4te ifnames autoconf; do \ + ln -sf /usr/bin/$${i}2.69 bin/$${i}; \ + done +endif + command -v autoconf + /bin/uname -a + lsb_release -a + + -cat /proc/sys/kernel/random/entropy_avail + + mkdir -p stamps + rm -rf $(builddir) + mkdir -p $(builddir) +# bash make/autoconf/autogen.sh + cd $(builddir) && $(EXTRA_BUILD_ENV) bash ../configure \ + $(DEFAULT_CONFIGURE_ARGS) \ + $(COMMON_CONFIGURE_ARGS) + + touch $@ + +stamps/zero-configure: stamps/build stamps/unpack + @echo '========== $@ ==========' + mkdir -p stamps + rm -rf $(zbuilddir) + mkdir -p $(zbuilddir) + $(if $(ZERO_CC), export CC=$(ZERO_CC); export CXX=$(ZERO_CXX);) \ + cd $(zbuilddir) && $(EXTRA_BUILD_ENV) bash ../configure \ + $(ZERO_CONFIGURE_ARGS) \ + $(COMMON_CONFIGURE_ARGS) + + touch $@ + +stamps/unpack: + : # apply some architecture specific patches ... +#ifeq ($(DEB_HOST_ARCH),alpha) +# patch -p1 < debian/patches/alpha-float-const.diff +#endif + + $(MAKE) -f debian/rules packaging-files + + mkdir -p stamps + touch $@ + +ifeq ($(with_check),yes) + ifneq (,$(filter $(DEB_HOST_ARCH), $(jtreg_archs))) + with_jtreg_check = $(default_vm) + endif + + ifneq (,$(filter zero, $(alternate_vms))) + ifneq (,$(filter $(DEB_HOST_ARCH), arm64 amd64 i386)) + # only activate after testing; hangs several tests. + with_jtreg_check += zero + endif + endif +endif + +build_stamps = \ + stamps/build \ + $(if $(filter $(DEB_HOST_ARCH),$(altzero_archs)),stamps/zero-build) + +build_stamps += stamps/jtreg-check-default + +update-control-files: debian/control debian/tests/control gen-autopkgtests update-license + +update-license: +ifneq (,$(filter $(distrel),squeeze wheezy jessie stretch buster bullseye bookworm lucid precise trusty xenial bionic focal)) + @echo "Skipping debian/copyright valdidation for $(distrel), old release." +else + @cp -p debian/copyright debian/copyright.old + ./debian/copyright-generator/copyright-gen.py + @if cmp -s debian/copyright debian/copyright.old; then \ + rm -f debian/copyright.old; \ + else \ + diff -u debian/copyright.old debian/copyright | wdiff -d -; \ + echo "debian/copyright did change, please restart the build. Run make -f debian/rules update-control-files to update packaging sources."; \ + rm -f debian/copyright.old; \ + exit 1; \ + fi +endif + +PRE_BUILD_DEP = +ifeq (,$(filter nogen, $(DEB_BUILD_OPTIONS))) +# Only check control files on amd64 +ifeq (amd64,$(DEB_HOST_ARCH)) +PRE_BUILD_DEP = update-control-files +endif +endif + +# do not check control files if with_check is disabled +ifneq ($(with_check),yes) +PRE_BUILD_DEP = +endif + +pre-build: $(PRE_BUILD_DEP) +ifeq ($(with_check),yes) + jtreg_version="$$(dpkg-query -f '$${Version}\n' -W $(jtreg_pkg))"; \ + if ! dpkg --compare-versions $(min_jtreg_version) le $$jtreg_version; then \ + echo "Error: testsuite requires jtreg $(min_jtreg_version) but $$jtreg_version is installed"; \ + echo "Please update the jtreg dependency and regenerate debian/control"; \ + false; \ + fi +endif +ifneq (,$(filter $(DEB_HOST_ARCH),s390)) + @echo explicitely fail the build for $(DEB_HOST_ARCH), patches not updated +#else ifneq (,$(filter $(DEB_HOST_ARCH),armel)) +# @echo explicitely fail the build for $(DEB_HOST_ARCH), ARM assembler interpreter not yet ported + false +endif + + +build-arch: build +build-indep: build stamps/build-docs +build: pre-build $(build_stamps) + if [ -f buildwatch.pid ]; then \ + pid=$$(cat buildwatch.pid); \ + kill -1 $$pid || :; sleep 1; kill -9 $$pid || :; \ + fi + rm -f buildwatch.pid + +stamps/build: stamps/configure + @echo '========== $@ ==========' +ifneq (,$(filter $(DEB_HOST_ARCH), alpha armel armhf ia64 loong64 m68k mips mipsel mips64 mips64el powerpc riscv64 s390x sh4 sparc sparc64)) + sh -c 'sh debian/buildwatch.sh $(CURDIR)/$(builddir) &' +endif + $(EXTRA_BUILD_ENV) $(MAKE) --no-print-directory -C $(builddir) $(build_target); \ + rv=$$?; \ + for log in `find $(builddir) -name 'hs_err_pid*.log' -o -name 'replay_pid*.log'`; do \ + [ -f $$log ] || continue; \ + echo "=== $$log ==="; \ + cat $$log; \ + echo "======"; \ + done; \ + if [ -f buildwatch.pid ]; then \ + pid=$$(cat buildwatch.pid); \ + kill -1 $$pid || :; sleep 1; kill -9 $$pid || :; \ + fi; \ + exit $$rv + + touch $@ + +stamps/zero-build: stamps/zero-configure + @echo '========== $@ ==========' + : # FIXME: build using the just built jdk, and build the vm only + $(EXTRA_BUILD_ENV) $(MAKE) --no-print-directory -C $(zbuilddir) $(zbuild_target); \ + rv=$$?; \ + for log in `find $(zbuilddir) -name 'hs_err_pid*.log' -o -name 'replay_pid*.log'`; do \ + [ -f $$log ] || continue; \ + echo "=== $$log ==="; \ + cat $$log; \ + echo "======"; \ + done; \ + if [ -f buildwatch.pid ]; then \ + pid=$$(cat buildwatch.pid); \ + kill -1 $$pid || :; sleep 1; kill -9 $$pid || :; \ + fi; \ + exit $$rv + + rm -rf $(builddir)/$(sdkimg)/lib/zero + cp -a $(zbuilddir)/$(zsdkimg)/lib/zero \ + $(builddir)/$(sdkimg)/lib/. + touch $@ + +stamps/build-docs: stamps/build + @echo '========== $@ ==========' + mkdir -p $(builddir)/images/docs + echo '<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="refresh" content="0;url=api/index.html"> </head> </html>' > $(builddir)/images/docs/index.html +ifeq ($(with_docs),yes) + LOG=trace $(MAKE) -C $(builddir) docs +endif + touch $@ + +stamps/jtreg-check-default: stamps/build + $(MAKE) -f debian/rules jtreg-run-check VMNAME=$(default_vm) VMARGS= \ + $(if $(filter $(default_vm),hotspot),TEST_SUITES='hotspot langtools jaxp jdk',TEST_SUITES='hotspot langtools jaxp') +# TEST_SUITES='hotspot langtools jaxp' + touch $@ + +stamps/jtreg-check-zero: stamps/build + $(MAKE) -f debian/rules jtreg-run-check VMNAME=zero VMARGS='-vmoption:-zero' \ + TEST_SUITES='hotspot langtools jaxp' + touch $@ + +jtreg-run-check: + mkdir -p jtreg-test-output +ifneq (,$(filter $(VMNAME), $(with_jtreg_check))) + if [ ! -f $(builddir)/$(sdkimg)/conf/security/java.security.install ]; then \ + fgrep -v 'sun.security.pkcs11' $(builddir)/$(sdkimg)/conf/security/java.security \ + > $(builddir)/$(sdkimg)/conf/security/java.security.test; \ + mv $(builddir)/$(sdkimg)/conf/security/java.security \ + $(builddir)/$(sdkimg)/conf/security/java.security.install; \ + mv $(builddir)/$(sdkimg)/conf/security/java.security.test \ + $(builddir)/$(sdkimg)/conf/security/java.security; \ + fi + + @echo "BEGIN jtreg" + $(TIME) $(MAKE) -f debian/rules -k jtregcheck \ + $(if $(TEST_SUITES),TEST_SUITES="$(TEST_SUITES)") \ + JTREG_OPTIONS='$(VMARGS)' \ + 2>&1 | tee jtreg-test-output/jtreg_output-$(VMNAME) + @echo "END jtreg" + + if [ -f $(builddir)/$(sdkimg)/conf/security/java.security.install ]; then \ + mv $(builddir)/$(sdkimg)/conf/security/java.security.install \ + $(builddir)/$(sdkimg)/conf/security/java.security; \ + fi + + for i in check-hotspot.log check-jaxp.log check-jdk.log check-langtools.log jtreg-summary.log; do \ + if [ -f jtreg-test-output/$$i ]; then \ + mv jtreg-test-output/$$i jtreg-test-output/$${i%*.log}-$(VMNAME).log; \ + else \ + mkdir -p jtreg-test-output; \ + fi; \ + done + + @echo "BEGIN jtreg-summary-$(VMNAME)" + -cat jtreg-test-output/jtreg-summary-$(VMNAME).log + @echo "END jtreg-summary-$(VMNAME)" + + -for i in hotspot langtools jaxp jdk; do \ + find jtreg-test-output/$$i/JTwork/ -name '*.jtr'; \ + done | sort -u > jtreg-test-output/failed_tests-$(VMNAME).list; \ + GZIP=-9vn tar --ignore-failed-read -C . -c -z -f jtreg-test-output/failed_tests-$(VMNAME).tar.gz -T jtreg-test-output/failed_tests-$(VMNAME).list + GZIP=-9vn tar -C . -c -z -f jtreg-test-output/jtreport-$(VMNAME).tar.gz $$(find jtreg-test-output -name JTreport) +else + echo "jtreg harness not run for this build" > jtreg-test-output/jtreg_output-$(VMNAME) +endif + +# ---------------------------------------------------------------------------- +# jtreg targets taken from IcedTea + +TESTS_TO_RUN = $(addprefix check-,$(TEST_SUITES)) + +check-hotspot: stamps/build + @echo '===== START $@ =====' + mkdir -p jtreg-test-output/hotspot + BOOTJDK_HOME=$(BOOTJDK_HOME) JTREG_OPTIONS=$(JTREG_OPTIONS) VMNAME=$(VMNAME) JDK_TO_TEST=$(builddir)/$(sdkimg) \ + AUTOPKGTEST_TMP=/tmp/ AUTOPKGTEST_ARTIFACTS=jtreg-test-output/ \ + $(TIME) debian/tests/hotspot | tee jtreg-test-output/$@.log + @echo '===== END $@ =====' + +check-langtools: stamps/build + @echo '===== START $@ =====' + mkdir -p jtreg-test-output/langtools + BOOTJDK_HOME=$(BOOTJDK_HOME) JTREG_OPTIONS=$(JTREG_OPTIONS) VMNAME=$(VMNAME) JDK_TO_TEST=$(builddir)/$(sdkimg) \ + AUTOPKGTEST_TMP=/tmp/ AUTOPKGTEST_ARTIFACTS=jtreg-test-output/ \ + $(TIME) debian/tests/langtools | tee jtreg-test-output/$@.log + @echo '===== END $@ =====' + +check-jaxp: stamps/build + @echo '===== START $@ =====' + mkdir -p jtreg-test-output/jaxp + BOOTJDK_HOME=$(BOOTJDK_HOME) JTREG_OPTIONS=$(JTREG_OPTIONS) VMNAME=$(VMNAME) JDK_TO_TEST=$(builddir)/$(sdkimg) \ + AUTOPKGTEST_TMP=/tmp/ AUTOPKGTEST_ARTIFACTS=jtreg-test-output/ \ + $(TIME) debian/tests/jaxp | tee jtreg-test-output/$@.log + @echo '===== END $@ =====' + +check-jdk: stamps/build + @echo '===== START $@ =====' + mkdir -p jtreg-test-output/jdk + BOOTJDK_HOME=$(BOOTJDK_HOME) JTREG_OPTIONS=$(JTREG_OPTIONS) VMNAME=$(VMNAME) JDK_TO_TEST=$(builddir)/$(sdkimg) \ + AUTOPKGTEST_TMP=/tmp/ AUTOPKGTEST_ARTIFACTS=jtreg-test-output/ \ + $(TIME) debian/tests/jdk | tee jtreg-test-output/$@.log + @echo '===== END $@ =====' + +jtregcheck: $(TESTS_TO_RUN) + for i in $(TEST_SUITES); do \ + echo "--------------- jtreg console summary for $$i ---------------"; \ + egrep -v '^(Passed:|Directory|Re[a-z]+\ written\ to)' jtreg-test-output/check-$$i.log; \ + done | tee jtreg-test-output/jtreg-summary.log + +# ---------------------------------------------------------------------------- + +clean: debian-clean + dh_testdir + dh_testroot + rm -rf stamps build build-* jtreg-test-output + rm -rf autom4te.cache + rm -f bin/{jtreg.tmwrc,my-jtreg-run,my-xvfb-run,auto*,ifnames} + rm -f buildwatch.pid + rm -f config.log configure.log + dh_clean + +debian-clean: + dh_testdir + dh_testroot + dh_prep + for f in debian/*.in; do \ + f2=$$(echo $$f | sed 's/JB/$(basename)/;s/\.in$$//'); \ + case "$$f2" in debian/control|debian/watch) continue; esac; \ + rm -f $$f2; \ + done + rm -f debian/*.install debian/*.links debian/*.debhelper.log + +lib_ext_dirs = common $(sort $(foreach arch,$(arch_map),$(firstword $(subst =,$(SPACE),$(arch))))) +ifeq ($(derivative),Ubuntu) + lib_ext_dirs := $(filter-out arm hppa m68k mips% s390% sh%, $(lib_ext_dirs)) +else + lib_ext_dirs := $(filter-out arm hppa, $(lib_ext_dirs)) +endif + +install: packaging-files build + dh_testdir + dh_testroot + dh_prep || dh_clean -k + rm -f debian/*.install debian/*.links + dh_installdirs + + @echo "all_jre_tools: $(all_jre_tools)" + @echo "jre_tools: $(jre_tools)" + @echo "jre_hl_tools: $(jre_hl_tools)" + @echo "all_jdk_tools: $(all_jdk_tools)" + @echo "jdk_tools: $(jdk_tools)" + + : # install into temporary location + mkdir -p $(d)/$(basedir) + cp -a $(builddir)/$(sdkimg)/* $(d)/$(basedir)/ + +# copy jtreg tests + mkdir -p $(d)/$(testsuitedir) + cp -a $(builddir)/$(testimg)/* $(d)/$(testsuitedir) + rm -rf $(d)/$(testsuitedir)/jdk/demos + rm $(d)/$(testsuitedir)/build-info.properties + rm $(d)/$(testsuitedir)/Readme.txt + find $(d)/$(testsuitedir) -name .gitignore -delete + + chmod -R u+w $(d) + + : # use javaws from icedtea-netx + find $(d) -name 'javaws*' | xargs -r rm -f + + : # install default jvm config file + ls -l $(d)/$(basedir)/lib + cp debian/jvm.cfg-default $(d)/$(basedir)/lib/. + + : # FIXME, these appeared with 24~36ea without binaries + rm -f $(d)/$(basedir)/man/man1/jabswitch.1 + rm -f $(d)/$(basedir)/man/man1/jaccess*.1 + rm -f $(d)/$(basedir)/man/man1/kinit.1 + rm -f $(d)/$(basedir)/man/man1/klist.1 + rm -f $(d)/$(basedir)/man/man1/ktab.1 + + : # handle manpages + : # Render man pages without any formatting breaks, whitespaces and + : # hyphens, and then compare them to the pre-generated ones in + : # debian/man. +ifeq ($(DEB_HOST_ARCH),amd64) + mkdir -p $(d)/man-diff/{new,old};\ + cp -r $(builddir)/$(sdkimg)/man/man1/* $(d)/man-diff/new/; \ + cp -r debian/man/* $(d)/man-diff/old/; \ + for man_file in `find $(d)/man-diff -type f -print`; do \ + { printf ".nh\n.na\n.ll 100000n\n"; cat $$man_file; } | \ + LC_ALL=C groff -man -Tascii -P-c -rHY=0 | \ + col -bx | tr -d '[:space:]-' > $$man_file.txt 2>/dev/null; \ + rm -f $$man_file; \ + done; \ + diff -r "$(d)/man-diff/new/" "$(d)/man-diff/old/"; \ + if [ $$? -ne 0 ]; then \ + rm -rf debian/man; \ + mkdir -p debian/man; \ + cp -p $(builddir)/$(sdkimg)/man/man1/*.1 debian/man/; \ + echo "Man pages updated, please restart the build."; \ + exit 1; \ + fi; \ + rm -rf $(d)/man-diff +else ifeq (,$(filter $(DEB_HOST_ARCH), $(pandoc_archs))) + : # copy man pages, pre-generated on amd64 + mkdir -p $(d)/$(basedir)/man/man1 + @echo "Copying pre-generated man pages:" + for i in $$(cd $(builddir)/$(sdkimg)/bin && ls); do \ + if [ -f debian/man/$$i.1 ]; then \ + echo " using pre-generated man page for $$i"; \ + cp -p debian/man/$$i.1 $(d)/$(basedir)/man/man1/.; \ + else \ + echo " no pre-generated man page for $$i"; \ + fi; \ + done +endif + + : # compress manpages + find $(d)/$(basedir)/man -type f ! -type l | xargs gzip -9v -n + +ifeq ($(with_debugedit),yes) + : # rewrite build-id + for i in $$(find $(d)/$(basedir) -type f | xargs -r file | sed -n '/ELF/s/:.*//p'); do \ + debugedit --build-id --build-id-seed='$(build_id_seed)' $$i; \ + done +endif + + mkdir -p $(d)/$(etcdir)/security + mkdir -p $(d)/$(etcdir)/security/policy/limited + mkdir -p $(d)/$(etcdir)/security/policy/unlimited + mkdir -p $(d)/$(etcdir)/management + mkdir -p $(d)/$(etcdir)/jfr + +ifeq (0,1) + : # rename templates (comments only) to config files, + : # and move to /$(etcdir) + for i in \ + conf/management/jmxremote.password \ + conf/management/snmp.acl \ + conf/sdp/sdp.conf; \ + do \ + mv $(d)/$(basedir)/$$i.template $(d)/$(etcdir)/$$i; \ + done +else + : # FIXME: what to do about these? + for i in \ + conf/management/jmxremote.password \ + conf/management/snmp.acl \ + conf/sdp/sdp.conf; \ + do \ + rm -f $(d)/$(basedir)/$$i.template; \ + done +endif + +ifeq ($(with_bridge),atk) +# only add releases that are known to work with atk +# by default leave atk disabled +# ifneq (,$(filter $(distrel),)) +# cp -p debian/accessibility-atk.properties.enabled \ + $(d)/$(basedir)/conf/accessibility.properties +# else + cp -p debian/accessibility-atk.properties.disabled \ + $(d)/$(basedir)/conf/accessibility.properties +# endif +else + cp -p debian/accessibility.properties $(d)/$(basedir)/conf/ +endif + cp -p debian/swing.properties $(d)/$(basedir)/conf/ + +ifneq (,$(pkg_certs)) + rm -f $(d)/$(basedir)/lib/security/cacerts +endif + + : # FIXME: merge nss changes from IcedTea + cp debian/nss.cfg $(d)/$(basedir)/conf/security/nss.cfg + + cp $(d)/$(basedir)/conf/jaxp-strict.properties.template \ + $(d)/$(basedir)/conf/jaxp-strict.properties + + : # move config files to $(etcdir) and symlink them. + rm -f $(d_jrehl).links + for i in \ + conf/accessibility.properties \ + conf/jaxp.properties \ + conf/jaxp-strict.properties \ + conf/logging.properties \ + conf/sound.properties \ + conf/net.properties \ + lib/psfontj2d.properties \ + lib/psfont.properties.ja \ + lib/jfr/default.jfc \ + lib/jfr/profile.jfc \ + conf/jaxp-strict.properties.template \ + conf/swing.properties \ + conf/management/jmxremote.access \ + conf/management/management.properties \ + conf/security/java.security \ + conf/security/policy/limited/default_local.policy \ + conf/security/policy/limited/exempt_local.policy \ + conf/security/policy/limited/default_US_export.policy \ + conf/security/policy/unlimited/default_local.policy \ + conf/security/policy/unlimited/default_US_export.policy \ + conf/security/policy/README.txt \ + $$([ -f $(d)/$(basedir)/conf/security/nss.cfg ] && echo conf/security/nss.cfg) \ + $(if $(findstring ca-cert,$(pkg_certs)),,lib/security/cacerts) \ + lib/security/blocked.certs \ + lib/security/public_suffix_list.dat; \ + do \ + dest=$$(echo $$i | sed 's,^[^/]*/,,'); \ + mv $(d)/$(basedir)/$$i $(d)/$(etcdir)/$$dest; \ + echo "$(etcdir)/$$dest $(basedir)/$$i" >> $(d_jrehl).links; \ + done + mv $(d)/$(basedir)/lib/jvm.cfg \ + $(d)/$(etcdir)/ +ifneq (,$(filter $(DEB_HOST_ARCH), $(hotspot_archs))) + printf -- '-zero KNOWN\n' >> $(d)/$(etcdir)/jvm.cfg +else + printf -- '-zero KNOWN\n' >> $(d)/$(etcdir)/jvm.cfg + printf -- '-server ALIASED_TO -zero\n' >> $(d)/$(etcdir)/jvm.cfg +endif +ifneq (,$(filter $(DEB_HOST_ARCH), amd64 i386)) + printf -- '-dcevm KNOWN\n' >> $(d)/$(etcdir)/jvm.cfg +endif + + : # remove files which we do not want to distribute + + : # remove empty directories + + : # FIXME: fix, move and install tapset files + rm -rf $(d)/$(basedir)/tapset + + : # TODO: why do we provide a custom font.properties.ja? + : # cp -p debian/font.properties.ja $(d_jbin)/$(etcdir)/. +# cp debian/font.properties.wqy_zenhai \ +# $(d)/$(etcdir)/font.properties.ja + + + : # now move things to the packages. it is so ****** to create + : # .install files first. dh_movefiles did do the job perfectly + + : # $(p_jrehl).install / $(p_jre).install + ( \ + echo 'etc'; \ + echo '$(basedir)/lib/$(if $(filter $(DEB_HOST_ARCH),$(hotspot_archs)),server,zero)'; \ + echo '$(basedir)/lib/jvm.cfg-default'; \ + echo '$(basedir)/lib/libjli.so'; \ + echo '$(basedir)/lib/jexec'; \ + echo '$(basedir)/lib/jspawnhelper'; \ + echo '$(basedir)/lib/jrt-fs.jar'; \ + echo '$(basedir)/release'; \ + echo '$(basedir)/lib/tzdb.dat'; \ + echo '$(basedir)/lib/classlist'; \ + echo '$(basedir)/lib/modules'; \ + ) > debian/$(p_jrehl).install +ifneq (,$(filter $(DEB_HOST_ARCH),i386)) + ifneq (,$(findstring --with-jvm-variants=client,$(DEFAULT_CONFIGURE_ARGS))) + echo '$(basedir)/lib/client' >> debian/$(p_jrehl).install + endif +endif +ifeq ($(derivative),Ubuntu) + ( \ + echo 'usr/share/apport/package-hooks'; \ + ) >> debian/$(p_jrehl).install +endif + + $(RM) debian/$(p_jre).install + + : # jre binaries and man pages + for i in $(jre_hl_tools); do \ + case "$$i" in \ + *policytool*) p=debian/$(p_jre).install;; \ + *) p=debian/$(p_jrehl).install; \ + esac; \ + echo $(basedir)/bin/$$i >> $$p; \ + if [ -f $(d)/$(basedir)/man/man1/$$i.1.gz ]; then \ + echo $(basedir)/man/man1/$$i.1.gz >> $$p; \ + fi; \ + if [ -f $(d)/$(basedir)/man/ja_JP.UTF-8/man1/$$i.1.gz ]; then \ + echo $(basedir)/man/ja_JP.UTF-8/man1/$$i.1.gz >> $$p; \ + fi; \ + done + + cd $(CURDIR)/$(d); \ + for i in $(basedir)/lib/*.so; do \ + case "$$i" in \ + */libawt_xawt.so|*/libjawt.so|*/libsplashscreen.so|*/xawt) echo $$i >> ../$(p_jre).install;; \ + */hsdis*.so) ;; \ + */zero) echo $$i >> ../$(p_jrez).install;; \ + *) echo $$i >> ../$(p_jrehl).install; \ + esac; \ + done + + @echo XXXXX $(alternate_vms) +ifneq (,$(filter zero, $(alternate_vms))) + echo '$(basedir)/lib/zero' >> debian/$(p_jrez).install +endif + + + : # $(p_jrehl).install + ( \ + echo '$(basedir)/legal'; \ + if [ -d $(d)/$(basedir)/man/ja ]; then \ + echo '$(basedir)/man/ja'; \ + fi; \ + ) >> debian/$(p_jrehl).install + + : # $(p_jdkhl).install + ( \ + for i in $(jdk_hl_tools); do \ + echo $(basedir)/bin/$$i; \ + if [ -f $(d)/$(basedir)/man/man1/$$i.1.gz ]; then \ + echo $(basedir)/man/man1/$$i.1.gz; \ + fi; \ + if [ -f $(d)/$(basedir)/man/ja_JP.UTF-8/man1/$$i.1.gz ]; then \ + echo $(basedir)/man/ja_JP.UTF-8/man1/$$i.1.gz; \ + fi; \ + done; \ + cd $(d); \ + for i in $(basedir)/include/*.h; do \ + case $$i in */jawt.h|*/jawt_md.h) continue; esac; \ + [ -h $$i ] && continue; \ + echo $$i; \ + done; \ + echo '$(basedir)/include/*/jni_md.h'; \ + echo '$(basedir)/jmods'; \ + echo '$(basedir)/lib/ct.sym'; \ + ) > debian/$(p_jdkhl).install + + : # $(p_jdk).install + ( \ + echo '$(basedir)/include/jawt.h'; \ + echo '$(basedir)/include/*/jawt_md.h'; \ + for i in $(jdk_tools); do \ + echo $(basedir)/bin/$$i; \ + if [ -f $(d)/$(basedir)/man/man1/$$i.1.gz ]; then \ + echo $(basedir)/man/man1/$$i.1.gz; \ + fi; \ + if [ -f $(d)/$(basedir)/man/ja_JP.UTF-8/man1/$$i.1.gz ]; then \ + echo $(basedir)/man/ja_JP.UTF-8/man1/$$i.1.gz; \ + fi; \ + done; \ + ) > debian/$(p_jdk).install + + : # $(p_src).install + ( \ + echo '$(basedir)/lib/src.zip $(TOP)/$(basename)/lib'; \ + ) > debian/$(p_src).install + + : # copy apport hook +ifeq ($(derivative),Ubuntu) + mkdir -p $(d)/usr/share/apport/package-hooks/ + cp debian/apport-hook.py $(d)/usr/share/apport/package-hooks/source_$(basename).py +endif + + : # move demos and samples, create symlinks for $(p_demo) + mkdir -p $(d)/usr/share/doc/$(p_jrehl)/demo + for i in $(d)/$(basedir)/demo/*; do \ + b=$$(basename $$i); \ + case "$$i" in \ + */jvmti) \ + echo $(basedir)/demo/$$b usr/share/doc/$(p_jrehl)/demo/$$b >> $(d_demo).links;; \ + *) \ + mv $$i $(d)/usr/share/doc/$(p_jrehl)/demo/$$b; \ + echo usr/share/doc/$(p_jrehl)/demo/$$b $(basedir)/demo/$$b >> $(d_demo).links;; \ + esac; \ + done + echo usr/share/doc/$(p_jre) usr/share/doc/$(p_demo) >> $(d_demo).links + + : # $(p_demo).install + ( \ + echo '$(basedir)/demo'; \ + echo 'usr/share/doc/$(p_jrehl)/demo'; \ + ) > debian/$(p_demo).install + + : # $(p_test).install + ( \ + echo '$(testsuitedir)'; \ + ) > debian/$(p_test).install + + : # $(p_dbg).install +ifneq (,$(wildcard $(builddir)/$(sdkimg)/lib/*.diz)) + ( \ + echo '$(basedir)/lib/*.diz'; \ + echo '$(basedir)/lib/*/*.diz'; \ + ) > debian/$(p_dbg).install +endif + +# the logic here -> move external debuginfo files into usr/lib/debug +# check binaries and if the debuginfo is found, check if the binary has build id +# debug information with build ids is moved under usr/lib/debug/.build-id +# since we rewrite the build id with_debugedit=yes, patch the build id inside +# the debug symbols file +# otherwise (no buildid) just lib debuginfo file where it is + +# copy symbols for hotspot vm + mkdir -p $(d)/usr/lib/debug + (cd $(d) && find . -path './$(basedir)/*' -name '*.debuginfo' | cpio -pdm usr/lib/debug/) + find $(d)/$(basedir)/ -name '*.debuginfo' -exec rm {} \; + + echo > debian/$(p_dbg).install + for binary in `(cd $(d) && find . -path './$(basedir)/*' -print)`; do \ + dir=`dirname $$binary`; \ + base=`basename $$binary .so`; \ + debuginfo=usr/lib/debug/$$dir/$$base.debuginfo; \ + [ -f $(d)/$$debuginfo ] || continue; \ + $(OBJCOPY) --compress-debug-sections $(d)/$$debuginfo; \ + b_id=$$(LC_ALL=C readelf -n $(d)/$$binary | sed -n 's/ *Build ID: *\([0-9a-f][0-9a-f]*\)/\1/p'); \ + if [ -z "$$b_id" ]; then \ + echo $$debuginfo >> debian/$(p_dbg).install; \ + else \ + debugdir=usr/lib/debug/.build-id/$${b_id:0:2}; \ + f=$${b_id:2}.debug; \ + mkdir -p $(d)/$$debugdir; \ + mv $(d)/$$debuginfo $(d)/$$debugdir/$$f; \ + chmod 644 $(d)/$$debugdir/$$f; \ + echo $$debugdir/$$f >> debian/$(p_dbg).install; \ + notes=$$(mktemp); \ + $(OBJCOPY) --dump-section=.note.gnu.build-id=$$notes $(d)/$$binary; \ + $(OBJCOPY) --update-section=.note.gnu.build-id=$$notes $(d)/$$debugdir/$$f; \ + rm $$notes; \ + fi; \ + if [[ "$(DEB_BUILD_OPTIONS)" != *nostrip* ]]; then \ + $(OBJCOPY) --remove-section=.comment --remove-section=.note $(d)/$$binary; \ + if [[ "$$binary" != *.so ]]; then \ + $(STRIP) --strip-unneeded $(d)/$$binary; \ + fi; \ + fi; \ + done; + find $(d)/usr/lib/debug/ -type d -empty -delete + +# add hsdis if we've built it to the -dbg package +ifeq ($(enable_hsdis),yes) + echo $(basedir)/lib/hsdis-*.so >> debian/$(p_dbg).install +endif + +# : # FIXME: the targets are not installed ... +# rm -rfv $(d)/$(basedir)/lib/jfr + + dh_install --sourcedir=debian/tmp -XLICENSE +ifeq (,$(findstring old, $(old_debhelper))) + dh_missing --sourcedir=debian/tmp --fail-missing -XLICENSE +endif + + find $(d_jrehl) $(d_jre) $(d_jrez) \ + \( -name '*.debuginfo' -o -name '*.diz' \) -print | xargs -r rm -f + +ifeq (0,1) +# FIXME: ext no longer supported + : # give all permissions to cross-VM extension directory + sed -i \ + -e '/permission java\.security\.AllPermission;/,/};/c\' \ + -e ' permission java.security.AllPermission;\' \ + -e '};\' \ + -e '\' \ + $(if $(DEB_HOST_MULTIARCH),$(foreach i, $(lib_ext_dirs), \ + -e 'grant codeBase "file:/$(TOP)/java-$(shortver)-$(origin)-$(i)/lib/ext/*" {\' \ + -e ' permission java.security.AllPermission;\' \ + -e '};\')) \ + -e '\' \ + -e '// Comment this out if you want to give all permissions to the\' \ + -e '// Debian Java repository too:\' \ + -e '//grant codeBase "file:/usr/share/java/repository/-" {\' \ + -e '// permission java.security.AllPermission;\' \ + -e '//};\' \ + -e '' \ + $(d_jrehl)/$(security)/java.policy +# 'make Emacs Makefile mode happy +endif + + dh_installdirs -p$(p_jrehl) \ + usr/share/doc/$(p_jrehl) \ + usr/share/binfmts + + dh_installdirs -p$(p_jre) \ + usr/share/applications \ + usr/share/application-registry \ + usr/share/mime-info \ + usr/share/pixmaps + + : # add GNOME stuff +ifneq (,$(findstring cautious-launcher, $(java_launcher))) + cp -p debian/$(basename)-java.desktop \ + $(d_jre)/usr/share/applications/ +endif + + for i in archive; do \ + cp debian/$(basename)-$$i.applications \ + $(d_jre)/usr/share/application-registry/; \ + cp debian/$(basename)-$$i.keys $(d_jre)/usr/share/mime-info/; \ + cp debian/$(basename)-$$i.mime $(d_jre)/usr/share/mime-info/; \ + done + + cp -p debian/sun_java.xpm \ + $(d_jre)/usr/share/pixmaps/$(basename).xpm + + mkdir -p $(d_demo)/usr/share/pixmaps + cp -p debian/sun_java_app.xpm \ + $(d_demo)/usr/share/pixmaps/$(basename)-app.xpm + + : # install icons + for i in 16 24 32 48; do \ + install -D -m 644 -p src/java.desktop/unix/classes/sun/awt/X11/java-icon$${i}.png \ + $(d_jre)/usr/share/icons/hicolor/$${i}x$${i}/apps/$(basename).png; \ + done + + : # create docdir symlinks for $(p_jrehl) + ( \ + echo usr/share/doc/$(p_jrehl) $(basedir)/docs; \ + ) >> $(d_jrehl).links + + : # create docdir symlinks for $(p_jre) + ( \ + echo usr/share/doc/$(p_jrehl) usr/share/doc/$(p_jre); \ + ) > $(d_jre).links + +ifneq (,$(filter zero, $(alternate_vms))) + : # create docdir symlinks for $(p_jrez) + ( \ + echo usr/share/doc/$(p_jrehl) usr/share/doc/$(p_jrez); \ + ) > $(d_jrez).links +endif + + : # create docdir symlinks for $(p_src) + ( \ + echo usr/share/doc/$(p_jdk) usr/share/doc/$(p_src); \ + ) > $(d_src).links + + : # create docdir symlinks for $(p_jdkhl) + ( \ + echo usr/share/doc/$(p_jrehl) usr/share/doc/$(p_jdkhl); \ + ) > $(d_jdkhl).links + + : # create docdir symlinks for $(p_jdk) + ( \ + echo usr/share/doc/$(p_jre) usr/share/doc/$(p_jdk); \ + echo $(TOP)/$(basename)/lib/src.zip $(TOP)/$(basename)/src.zip; \ + ) > $(d_jdk).links +# doesn't work, no package dependency +ifneq (,$(DEB_HOST_MULTIARCH)) + echo '$(TOP)/$(basename)/src.zip $(basedir)/lib/src.zip' >> $(d_jdkhl).links + echo '$(TOP)/$(basename)/lib/src.zip $(basedir)/lib/src.zip' >> $(d_jdkhl).links +endif + + : # create docdir symlinks for $(p_dbg) + ( \ + echo usr/share/doc/$(p_jrehl) usr/share/doc/$(p_dbg); \ + ) > $(d_dbg).links + + : # create docdir symlinks for $(p_test) + ( \ + echo usr/share/doc/$(p_jdk) usr/share/doc/$(p_test); \ + ) > $(d_test).links + + : # OpenJDK Stack Unwinder and Frame Decorator +ifneq (,$(filter $(DEB_HOST_ARCH),amd64)) + mkdir -p $(d_jrehl)/usr/share/gdb/auto-load/$(basedir)/lib/server + cp debian/dbg.py \ + $(d_jrehl)/usr/share/gdb/auto-load/$(basedir)/lib/server/libjvm.so-gdb.py +endif + +ifeq ($(with_bridge),atk) + : # create links for the atk wrapper + ifeq (0,1) + # FIXME: ext no longer supported + echo "usr/share/java/java-atk-wrapper.jar $(basedir)/lib/ext/java-atk-wrapper.jar" \ + >> $(d_jre).links + endif + echo "usr/lib$(multiarch_dir)/jni/libatk-wrapper.so $(basedir)/lib/libatk-wrapper.so" \ + >> $(d_jre).links +else ifeq ($(with_bridge),yes) + ifeq (0,1) +# FIXME: ext no longer supported + : # create links for the gnome accessibility bridge + echo "usr/share/java/gnome-java-bridge.jar $(basedir)/lib/ext/gnome-java-bridge.jar" \ + >> $(d_jre).links + ifeq ($(with_jni_bridge),yes) + echo "usr/lib$(multiarch_dir)/jni/libjava-access-bridge-jni.so $(basedir)/lib/libjava-access-bridge-jni.so" \ + >> $(d_jre).links + endif + endif +endif + + : # create links for the config/lib files +# note: $(d_jrehl).links already created when moving files to the etcdir +ifneq (,$(DEB_HOST_MULTIARCH)) + mv $(d_jrehl)/$(etcdir)/jvm.cfg \ + $(d_jrehl)/$(etcdir)/jvm-$(DEB_HOST_ARCH).cfg + ( \ + echo "$(etcdir)/jvm-$(DEB_HOST_ARCH).cfg $(basedir)/lib/jvm.cfg"; \ + ) >> $(d_jrehl).links +else + ( \ + echo "$(etcdir)/jvm.cfg $(basedir)/lib/jvm.cfg"; \ + ) >> $(d_jrehl).links +endif +ifneq (,$(pkg_certs)) + echo "etc/ssl/certs/java/cacerts $(basedir)/lib/security/cacerts" \ + >> $(d_jrehl).links +endif + + @echo JRE_HL_TOOLS: $(jre_hl_tools) jexec + @echo JRE_TOOLS: $(jre_tools) + @echo JDK_HL_TOOLS: $(jdk_hl_tools) + @echo JDK_TOOLS: $(jdk_tools) + ( \ + echo 'name=$(jdirname)'; \ + echo 'alias=$(jdiralias)'; \ + echo 'priority=$(priority)'; \ + echo 'section=main'; \ + echo ''; \ + for i in $(jre_hl_tools); do \ + echo "hl $$i /$(basedir)/bin/$$i"; \ + done; \ + echo "hl jexec /$(basedir)/lib/jexec"; \ + for i in $(jre_tools); do \ + echo "jre $$i /$(basedir)/bin/$$i"; \ + done; \ + for i in $(jdk_hl_tools); do \ + echo "jdkhl $$i /$(basedir)/bin/$$i"; \ + done; \ + for i in $(jdk_tools); do \ + echo "jdk $$i /$(basedir)/bin/$$i"; \ + done; \ + ) > $(d_jrehl)/$(TOP)/.$(jdiralias).jinfo + + ( \ + echo 'package $(basename)'; \ + echo 'interpreter /usr/bin/jexec'; \ + echo 'magic PK\x03\x04'; \ + ) > $(d_jrehl)/$(basedir)/lib/jar.binfmt + + : # another jvm symlink + ln -sf $(jdirname) $(d_jrehl)/usr/lib/jvm/$(jdiralias) + : # the debug link only needed for debhelper << 9 + mkdir -p $(d_jrehl)/usr/lib/debug/usr/lib/jvm/$(jdirname) + ln -sf $(jdirname) $(d_jrehl)/usr/lib/debug/usr/lib/jvm/$(jdiralias) + + + : # install lintian overrides + for FILE in debian/*.overrides; do \ + PKG=`basename $$FILE .overrides`; \ + install -D -m644 $$FILE debian/$$PKG/usr/share/lintian/overrides/$$PKG; \ + done + +nodocs = $(if $(findstring nodoc, $(DEB_BUILD_OPTIONS)),-N$(p_doc)) +nojrez = $(if $(filter zero, $(alternate_vms)),,-N$(p_jrez)) + +# Build architecture independant packages +binary-indep: build-indep install + dh_testdir + dh_testroot +ifeq ($(with_docs),yes) + dh_installchangelogs -p$(p_doc) + dh_installdocs -p$(p_doc) + mkdir -p $(d_doc)/usr/share/doc/$(p_jrehl) + for i in $(builddir)/images/docs/*; do \ + [ -e $$i ] || continue; \ + b=$$(basename $$i); \ + cp -a $$i $(d_doc)/usr/share/doc/$(p_jrehl)/; \ + ln -sf ../$(p_jrehl)/$$b $(d_doc)/usr/share/doc/$(p_doc)/$$b; \ + done + + # replace bundled scripts with symlinks + JAVADOC_DIR="$(d_doc)/usr/share/doc/$(p_jrehl)/api"; \ + RESOURCE_DIR="$$(find $${JAVADOC_DIR} -name jquery-ui.min.css -exec dirname {} \;)"; \ + if [ -d "$${RESOURCE_DIR}" ]; then \ + rm -f $${RESOURCE_DIR}/jquery-ui.min.css && \ + dh_link -p$(p_doc) /usr/share/javascript/jquery-ui/themes/base/jquery-ui.min.css \ + "$${RESOURCE_DIR#$(d_doc)}/jquery-ui.min.css"; \ + else \ + echo "jquery-ui css directory not found!"; \ + exit 1; \ + fi; \ + SCRIPT_DIR="$$(find $${JAVADOC_DIR} -name jquery-ui.min.js -exec dirname {} \;)"; \ + if [ -d "$${SCRIPT_DIR}" ]; then \ + rm "$${SCRIPT_DIR}"/jquery* && \ + dh_link -p$(p_doc) /usr/share/javascript/jquery/jquery.min.js "$${SCRIPT_DIR#$(d_doc)}/jquery.min.js" && \ + dh_link -p$(p_doc) /usr/share/javascript/jquery-ui/jquery-ui.min.js "$${SCRIPT_DIR#$(d_doc)}/jquery-ui.min.js"; \ + find $${JAVADOC_DIR} -name "*.html" -exec sed -i 's/jquery-[0-9.]*\.min\.js/jquery.min.js/g' {} +; \ + else \ + echo "jquery script directory not found!"; \ + exit 1; \ + fi +endif +# FIXME: desktop and menu files not ready for multiarch. #658321 +ifeq (,$(DEB_HOST_MULTIARCH)) + dh_installmenu -i $(nodocs) +endif + -dh_icons -i $(nodocs) || dh_iconcache -i $(nodocs) +# dh_installdebconf -i $(nodocs) + dh_link -i $(nodocs) + set -e; if command -v dh_strip_nondeterminism >/dev/null; then \ + dh_strip_nondeterminism -i $(nodocs); \ + fi + dh_compress -i $(nodocs) -Xexamples -Xdemo -Xpackage-list -Xelement-list + dh_fixperms -i $(nodocs) + dh_installdeb -i $(nodocs) + dh_gencontrol -i $(nodocs) -- $(control_vars) + dh_md5sums -i $(nodocs) + dh_builddeb -i $(nodocs) $(bd_options) + +absarchdir = $(CURDIR)/$(d_jrehl)/$(basedir)/lib +shlibdeps_ld_path =$(absarchdir):$(absarchdir)/client:$(absarchdir)/server:$(absarchdir)/native_threads + +# pass vm name as first argument +define install_test_results + mkdir -p $(d_jdk)/usr/share/doc/$(p_jrehl)/test-$(DEB_HOST_ARCH) + -cp jtreg-test-output/jtreg_output-$(1) \ + $(d_jdk)/usr/share/doc/$(p_jrehl)/test-$(DEB_HOST_ARCH)/jtreg_output-$(1).log + -cp jtreg-test-output/jtreg-summary-$(1).log jtreg-test-output/check-*-$(1).log \ + $(d_jdk)/usr/share/doc/$(p_jrehl)/test-$(DEB_HOST_ARCH)/ + -cp jtreg-test-output/failed_tests-$(1).tar.gz \ + $(d_jdk)/usr/share/doc/$(p_jrehl)/test-$(DEB_HOST_ARCH)/failed_tests-$(1).tar.gz + -cp jtreg-test-output/jtreport-$(1).tar.gz \ + $(d_jdk)/usr/share/doc/$(p_jrehl)/test-$(DEB_HOST_ARCH)/jtreport-$(1).tar.gz +endef + +# Build architecture dependant packages +binary-arch: build install + dh_testdir + dh_testroot + + dh_installchangelogs -p$(p_jrehl) + dh_installdocs -p$(p_jrehl) \ + debian/JAVA_HOME \ + debian/README.alternatives \ + debian/README.Debian \ + debian/README.testsuite + $(call install_test_results,$(default_vm)) + +ifneq (,$(filter zero, $(alternate_vms))) + $(call install_test_results,zero) +endif +# FIXME: desktop and menu files not ready for multiarch. #658321 +ifeq (,$(DEB_HOST_MULTIARCH)) + dh_installmenu -a $(nodemo) $(nojrez) +endif + -dh_icons -a $(nodemo) $(nojrez) \ + || dh_iconcache -a $(nodemo) $(nojrez) +# dh_installdebconf -a $(nodemo) $(nojrez) + dh_link -a $(nodemo) $(nojrez) + set -e; if command -v dh_strip_nondeterminism >/dev/null; then \ + dh_strip_nondeterminism -a $(nodemo) $(nojrez); \ + fi +# The strip operation is performed manually, because the build packages +# external debug symbols (so that native libraries are included in the modules) +# This step would override the actual debug symbols with the empty sections +# dh_strip -v -a $(nodemo) $(nojrez) \ +# -Xlibjvm.so -X.debuginfo --dbg-package=$(p_dbg) + + dh_compress -a $(nodemo) $(nojrez) -Xexamples -Xdemo -Xpackage-list + dh_fixperms -a $(nodemo) $(nojrez) + dh_makeshlibs -p$(p_jrehl) -p$(p_jre) + dh_shlibdeps -v -a $(nodemo) $(nojrez) -L $(p_jrehl) \ + -Xlibfontmanager -Xlibjsound \ + -l$(shlibdeps_ld_path) \ + -- + dpkg-shlibdeps -pfontmanager -dRecommends -T$(d_jrehl).substvars \ + $(d_jrehl)/$(basedir)/lib/libfontmanager.so + dpkg-shlibdeps -pfontmanager -T$(d_jre).substvars \ + $(d_jrehl)/$(basedir)/lib/libfontmanager.so + dpkg-shlibdeps -pjsound -dRecommends -T$(d_jrehl).substvars \ + $(d_jrehl)/$(basedir)/lib/libjsound.so + dpkg-shlibdeps -pjsound -T$(d_jre).substvars \ + $(d_jrehl)/$(basedir)/lib/libjsound.so + + find $(d_jrehl) $(d_jre) $(d_jrez) -type f -name '*.debuginfo' + dh_installdeb -a $(nodemo) $(nojrez) + dh_gencontrol -a $(nodemo) $(nojrez) \ + -- $(control_vars) + dh_md5sums -a $(nodemo) $(nojrez) + : # FIXME: something seems to hang here ... + -ps afx + NO_PKG_MANGLE=1 \ + dh_builddeb -a $(nodemo) $(nojrez) #$(bd_options) + +git_project = jdk25u +git_tag = jdk-25.0.4+7 +package_version = $(shell echo $(PKGVERSION) | sed 's/-[^-][^-]*$$//') +ifneq ($(is_upstream_release),yes) + package_version := $(subst +,~,$(package_version)) +endif +git_url = https://github.com/openjdk/$(git_project) +origdir = ../$(basename)-$(package_version).orig +topdir = $(basename)-$(package_version) +gtest_repo = https://github.com/google/googletest +gtest_tag = 1.14.0 +gtestdir = ../$(basename)-$(package_version)-googletest.orig + +debian/watch: debian/watch.in debian/rules + @cp -p $@ $@.old + sed \ + -e 's|@git_url@|$(git_url)/tags|g' \ + -e 's|@gtest_repo@|$(gtest_repo)/tags|g' \ + -e 's|@gtest_tag@|$(gtest_tag)|g' \ + -e 's|@shortver@|$(shortver)|g' \ + debian/watch.in > debian/watch +# disable version mangling for the release version +ifeq ($(is_upstream_release),yes) + sed -i 's|repack.*\\|repack,\\|g' debian/watch +endif + @if cmp -s $@ $@.old; then \ + rm -f $@.old; \ + else \ + diff -u $@.old $@ | wdiff -d -; \ + echo "$@ did change, please restart the build"; \ + rm -f $@.old; \ + exit 1; \ + fi + +get-gtest: + rm -rf $(gtestdir) || true + mkdir $(gtestdir) + wget -O $(gtestdir)/googletest.tar.gz $(gtest_repo)/archive/refs/tags/v$(gtest_tag).tar.gz + set -ex; \ + repo=googletest; \ + d=$$(tar tf $(gtestdir)/$$repo.tar.gz | head -1 | sed 's,/.*,,'); \ + tar xf $(gtestdir)/$$repo.tar.gz; \ + XZ_OPT=-9v tar cfJ ../$(basename)_$(package_version).orig-$$repo.tar.xz googletest-${gtest_tag}; \ + rm -rf $(gtestdir) + rm -rf googletest-${gtest_tag} + +get-orig: get-gtest + rm -rf $(origdir) || true + mkdir $(origdir) + wget -O $(origdir)/jdk.tar.gz $(git_url)/archive/$(git_tag).tar.gz + + set -ex; \ + repo=jdk; \ + d=$$(tar tf $(origdir)/$$repo.tar.gz | head -1 | sed 's,/.*,,'); \ + tar xf $(origdir)/$$repo.tar.gz; \ + case $$repo in jdk) \ + rm -v -rf $$d/src/java.base/share/native/libzip/zlib; \ + find $$d/src/java.desktop/share/native/libjavajpeg \ + ! -name imageioJPEG.c ! -name jpegdecoder.c ! -name jinclude.h \ + -type f -print -delete; \ + rm -v -rf $$d/src/java.desktop/share/native/libsplashscreen/giflib; \ + rm -v -rf $$d/src/java.desktop/share/native/libsplashscreen/libpng; \ + rm -v -rf $$d/src/java.smartcardio/unix/native/libj2pcsc/MUSCLE; \ + esac; \ + mv $$d $(topdir); \ + chmod +x $(topdir)/configure; \ + rm -f $(topdir)/.hgtags; \ + rm -f $(topdir)/.gitattributes; \ + rm -rf $(topdir)/.github; \ + XZ_OPT=-9v tar cfJ ../$(basename)_$(package_version).orig.tar.xz $(topdir); \ + rm -rf $(topdir) + +# keep these in the tarball, older lcms are not supported +# rm -v -f $$d/src/java.desktop/share/native/liblcms/cms*.c; \ +# rm -v -f $$d/src/java.desktop/share/native/liblcms/lcms2*.h; \ + + rm -rf $(origdir) + +binary: binary-arch binary-indep +.PHONY: build build-arch build-indep clean binary-indep binary-arch binary install packaging-files debian/control debian/tests/control gen-autopkgtests debian/watch update-control-files update-license diff --git a/series b/series new file mode 100644 index 000000000..024cad794 --- /dev/null +++ b/series @@ -0,0 +1,26 @@ +autoconf-select.diff +system-pcsclite.diff +hotspot-mips-align.diff +icc_loading_with_symlink.diff +icedtea-override-redirect-compiz.patch +jdk-freetypeScaler-crash.diff +libpcsclite-dlopen.diff +jexec.diff +default-jvm-cfg.diff +workaround_expand_exec_shield_cs_limit.diff +adlc-parser.patch +multiple-pkcs11-library-init.patch +applet-hole.patch +m68k-support.diff +s390x-thread-stack-size.diff +jdk-getAccessibleValue.diff +zero-x32.diff +jtreg-location.diff +jdk-i18n-pt_BR.diff +mips-sigset.diff +disable-doclint-by-default.diff +hotspot-disable-exec-shield-workaround.diff +atk-wrapper-security.patch +dnd-files.patch +hotspot-powerpcspe.diff +hotspot-libpath.diff diff --git a/sharedmimeinfo b/sharedmimeinfo new file mode 100644 index 000000000..78604fdbe --- /dev/null +++ b/sharedmimeinfo @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'> + <mime-type type="application/java-archive"> + <comment>Java Archive</comment> + <glob pattern="*.jar"/> + </mime-type> + + <mime-type type="application/x-java-jnlp-file"> + <comment>Java Web Start application</comment> + <glob pattern="*.jnlp"/> + </mime-type> +</mime-info> diff --git a/source/format b/source/format new file mode 100644 index 000000000..163aaf8d8 --- /dev/null +++ b/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/source/lintian-overrides b/source/lintian-overrides new file mode 100644 index 000000000..e3145a583 --- /dev/null +++ b/source/lintian-overrides @@ -0,0 +1,29 @@ +# parts of the test suite, not installed +openjdk-25 source: source-is-missing + +# openjdk packages use old standards version as they need to support +# backports +openjdk-25 source: newer-standards-version +openjdk-25 source: uses-debhelper-compat-file +openjdk-25 source: package-uses-old-debhelper-compat-version + +# suppress warnings about experimental patches +openjdk-25 source: patch-file-present-but-not-mentioned-in-series + +# jtreg test suite contains pre-built jars +openjdk-25 source: source-contains-prebuilt-java-object + +# upstream code formatting +openjdk-25 source: very-long-line-length-in-source-file + +# false positive, jtreg tests contain example/ directories +openjdk-25 source: package-does-not-install-examples + +# upstream source tarball contains prebuilt javascript object +# that are replaced in d/rules with links to the Debian +# Javascript libraries +openjdk-25 source: source-contains-prebuilt-javascript-object + +# false positive: nproc is called to print the number of processors +# to the log +openjdk-25 source: debian-rules-calls-nproc diff --git a/sun_java.xpm b/sun_java.xpm new file mode 100644 index 000000000..00db1b68c --- /dev/null +++ b/sun_java.xpm @@ -0,0 +1,194 @@ +/* XPM */ +static char *sun_java[] = { +/* columns rows colors chars-per-pixel */ +"32 32 156 2", +" c #34479E", +". c #4152A3", +"X c #4153A2", +"o c #4153A3", +"O c #4D5EA8", +"+ c #4D5EA9", +"@ c #4E5EA9", +"# c #5A69AD", +"$ c #5A69AE", +"% c #5A69AF", +"& c #5A6AAD", +"* c #6675B3", +"= c #6775B2", +"- c #6775B3", +"; c #6776B3", +": c #6775B5", +"> c #6776B4", +", c #7480B7", +"< c #7380B8", +"1 c #7381B8", +"2 c #7380BA", +"3 c #7481B8", +"4 c #D12124", +"5 c #D42F31", +"6 c #D73D3E", +"7 c #D94A4A", +"8 c #D94A4B", +"9 c #DA4A4A", +"0 c #DA4B4B", +"q c #DC5957", +"w c #DC5858", +"e c #DD5859", +"r c #DD5959", +"t c #DF6664", +"y c #E06664", +"u c #E27471", +"i c #E27570", +"p c #E27472", +"a c #E37472", +"s c #E27574", +"d c #E37474", +"f c #E5827E", +"g c #E5837F", +"h c #818BBD", +"j c #818CBC", +"k c #808CBE", +"l c #818DC0", +"z c #8D97C2", +"x c #8D97C3", +"c c #8D97C5", +"v c #8E98C5", +"b c #99A2C7", +"n c #99A3C7", +"m c #99A2C8", +"M c #99A3C8", +"N c #99A2CA", +"B c #99A2CB", +"V c #A6AECD", +"C c #A5AED2", +"Z c #A6AED0", +"A c #B3B9D3", +"S c #B2B9D4", +"D c #B3B9D5", +"F c #B2B9D6", +"G c #B3BAD5", +"H c #BFC4D6", +"J c #BFC5D7", +"K c #BFC5D8", +"L c #BFC5D9", +"P c #BFC5DA", +"I c #BFC5DB", +"U c #BFC5DC", +"Y c #BFC5DD", +"T c #E58381", +"R c #E68380", +"E c #E88F89", +"W c #E88F8B", +"Q c #E8908A", +"! c #EB9D99", +"~ c #EB9D9A", +"^ c #EB9D9D", +"/ c #EDABA2", +"( c #EEABA6", +") c #EDACA6", +"_ c #F0B9B1", +"` c #F1B9B1", +"' c #F0B9B6", +"] c #F3C7BD", +"[ c #CCD0DA", +"{ c #CCD1DA", +"} c #CDD0DA", +"| c #CCD0DC", +" . c #CCD0DD", +".. c #CCD1DD", +"X. c #CCD0DE", +"o. c #CCD1DE", +"O. c #CCD1DF", +"+. c #D8DBDF", +"@. c #CCD0E0", +"#. c #D8DCE1", +"$. c #D9DCE1", +"%. c #D9DCE3", +"&. c #D9DCE4", +"*. c #D9DCE5", +"=. c #D9DCE6", +"-. c #D9DCE7", +";. c #D9DCE8", +":. c #F6D5CB", +">. c #F6D5CD", +",. c #F6D5D3", +"<. c #F9E3D7", +"1. c #F9E3DA", +"2. c #F9E3DB", +"3. c #E6E7E7", +"4. c #E5E7E9", +"5. c #E5E7EC", +"6. c #E5E8E8", +"7. c #E6E8E9", +"8. c #E6E8EA", +"9. c #E6E8EB", +"0. c #E5E8EC", +"q. c #E6E8EC", +"w. c #F9E3E1", +"e. c #F2F3EC", +"r. c #FCF0E1", +"t. c #FCF0E3", +"y. c #FCF1E5", +"u. c #FCF0E7", +"i. c #FCF1E6", +"p. c #FCF1E7", +"a. c #FCF1E8", +"s. c #FFFEED", +"d. c #FFFEEE", +"f. c #FFFEEF", +"g. c #F2F3F0", +"h. c #F2F3F1", +"j. c #F2F3F2", +"k. c #F2F3F4", +"l. c #FFFEF0", +"z. c #FFFEF1", +"x. c #FFFEF2", +"c. c #FFFEF3", +"v. c #FFFFF3", +"b. c #FFFFF4", +"n. c #FFFFF5", +"m. c #FFFFF6", +"M. c #FFFFF7", +"N. c #FFFFF8", +"B. c #FFFFF9", +"V. c #FFFFFA", +"C. c #FFFFFB", +"Z. c #FFFFFC", +"A. c #FFFFFD", +"S. c #FFFFFE", +"D. c gray100", +"F. c None", +/* pixels */ +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.w.~ F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.r F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.' q F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.M.q u F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.M.M.! 4 1.F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.M.M.f 4 E M.M.F.w.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.M.i.t 4 i x.1.g u ,.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.M.>.7 4 f r.f 5 ! C.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.1.5 4 / r.7 5 >.M.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.M.q 4 E d.i 4 >.M.F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.M.4 5 d.d.4 6 x.x.F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.7 7 d.d.4 4 :.M.F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.M./ 4 <.x.q 4 7 i.F.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.M.u t x.] 4 4 ) M.F.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.u.7 _ x.E 4 ! M.M.F.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.h.@.4.M.i.u i._ 5 i.M.F.-.N : c @.M.F.F.F.F.F.", +"F.F.F.F.F.F.k.B O h P x.x.M.x.i.a :.x.M.9.L @.L O c M.F.F.F.F.", +"F.F.F.F.F.F.> X c n b n n n n h = & X v M.M.M.8. M.F.F.F.F.", +"F.F.F.F.F.F.F.+...N n n n N N n J ..4.M.M.M.x.M.M. M.F.F.F.F.", +"F.F.F.F.F.F.F.M.+.O ..x.d.x.d.x.x.3.L 8.M.M.M.x. . X M.F.F.F.F.", +"F.F.F.F.F.F.F.M.F X = = = = O 8.M.M.h.& S M.F.F.F.F.", +"F.F.F.F.F.F.F.M.M...z = = = = = j V %.x.F.M.9.% S M.F.F.F.F.F.", +"F.F.F.F.F.F.F.M.M.4.n d.d.d.d.x.d.x.M.M.M.S X l 5.F.M.F.F.F.F.F.", +"F.F.F.F.F.F.M.M.x.= O = = = = o = -.-.S h.M.F.M.F.F.F.F.F.F.", +"F.F.F.F.F.M.-.{ { %., , A x.M.M.M.M.M.F.F.F.F.F.F.F.", +"F.F.F.F.F O , J e.x.d.d.{ { { +.x.x.x.M.M.M.M.M.=.Y F.F.F.F.F.F.", +"F.F.F.F. O z H %.d.x.x.d.d.d.d.x.x.x.x...K N O C C.F.F.F.F.F.", +"F.F.F.F.N O # = = = = = O O L C.F.F.F.F.F.F.", +"F.F.F.F.M.M.%.V > & O = N =.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.M.M.M.M.x.x.M.M.M.M.M.M.M.M.M.F.F.F.F.F.F.F.F.F.F.", +"F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F." +}; diff --git a/sun_java_app.xpm b/sun_java_app.xpm new file mode 100644 index 000000000..7a0f9414e --- /dev/null +++ b/sun_java_app.xpm @@ -0,0 +1,199 @@ +/* XPM */ +static char * dukejre_xpm[] = { +"32 32 164 2", +" c None", +". c #000000", +"+ c #2D2D2D", +"@ c #363636", +"# c #313131", +"$ c #3E3E3E", +"% c #3D3D3D", +"& c #2B2B2B", +"* c #444444", +"= c #494949", +"- c #373737", +"; c #1C1C1C", +"> c #545454", +", c #434343", +"' c #272727", +") c #0B0B0B", +"! c #414141", +"~ c #5C5C5C", +"{ c #4F4F4F", +"] c #141414", +"^ c #3A3A3A", +"/ c #585858", +"( c #403A3A", +"_ c #32201F", +": c #090202", +"< c #4F4E4E", +"[ c #833D3E", +"} c #BE3432", +"| c #D63736", +"1 c #79201F", +"2 c #040101", +"3 c #251313", +"4 c #212121", +"5 c #9A5857", +"6 c #EBB9B9", +"7 c #E03A38", +"8 c #CA3430", +"9 c #862221", +"0 c #251211", +"a c #774C35", +"b c #CC5213", +"c c #A25151", +"d c #B23D3C", +"e c #AC2B29", +"f c #8F2422", +"g c #691A19", +"h c #321D1E", +"i c #7E3D20", +"j c #D55A0D", +"k c #8E3F10", +"l c #250F0F", +"m c #5D1615", +"n c #631817", +"o c #661918", +"p c #501313", +"q c #200909", +"r c #3D3A39", +"s c #6D341B", +"t c #AE4F14", +"u c #CC5515", +"v c #44403F", +"w c #381414", +"x c #310C0C", +"y c #220908", +"z c #1F0B0B", +"A c #413939", +"B c #525252", +"C c #9B6343", +"D c #D96319", +"E c #D3A88C", +"F c #D7D7D7", +"G c #868383", +"H c #797777", +"I c #898989", +"J c #A3A3A3", +"K c #DBDBDB", +"L c #E27626", +"M c #DE6F21", +"N c #E9E8E7", +"O c #EDEDED", +"P c #F8F8F8", +"Q c #FFFFFF", +"R c #EC7A20", +"S c #E27728", +"T c #ED7C21", +"U c #E5E1DE", +"V c #EEEEEE", +"W c #F6F6F6", +"X c #FDFDFD", +"Y c #B76D3E", +"Z c #E5711D", +"` c #F0851E", +" . c #ED7D24", +".. c #F18B1D", +"+. c #C75810", +"@. c #CC5616", +"#. c #E36F1D", +"$. c #F2911A", +"%. c #FBFBFB", +"&. c #F9F6F2", +"*. c #F9AA14", +"=. c #F08A1D", +"-. c #D35E13", +";. c #E16D1C", +">. c #F49B18", +",. c #B9B9B9", +"'. c #FAFAFA", +"). c #F49818", +"!. c #E3701D", +"~. c #A1480F", +"{. c #E06B1C", +"]. c #FCFCFC", +"^. c #E26D1C", +"/. c #0F0F0F", +"(. c #DE691B", +"_. c #F6A016", +":. c #E97E1C", +"<. c #F7A117", +"[. c #EB7A20", +"}. c #E4701D", +"|. c #837B77", +"1. c #A0938A", +"2. c #717171", +"3. c #959595", +"4. c #E1A27A", +"5. c #DB844B", +"6. c #D6671F", +"7. c #D56318", +"8. c #D6671B", +"9. c #DB6616", +"0. c #DE6614", +"a. c #D96B1C", +"b. c #D66A21", +"c. c #D7996D", +"d. c #C0BFBF", +"e. c #393939", +"f. c #686868", +"g. c #8F8F8F", +"h. c #D3D3D3", +"i. c #D1D1D1", +"j. c #CFCFCF", +"k. c #DCDCDC", +"l. c #D8D8D8", +"m. c #C0C0C0", +"n. c #C3C3C3", +"o. c #333333", +"p. c #696969", +"q. c #606060", +"r. c #E6E6E6", +"s. c #A0A0A0", +"t. c #8A8A8A", +"u. c #5F5F5F", +"v. c #8C8C8C", +"w. c #B6B6B6", +"x. c #BDBDBD", +"y. c #262626", +"z. c #7C7C7C", +"A. c #C2C2C2", +"B. c #C1C1C1", +"C. c #B5B5B5", +"D. c #6E6E6E", +"E. c #868686", +"F. c #ABABAB", +"G. c #292929", +" ", +" . . ", +" . . . . ", +" . . . . ", +" + . . . . . . ", +" @ # . . . . . . . ", +" $ % & . . . . . . ", +" * = - ; . . . . . ", +" * > , ' ) . . . . . . ", +" ! ~ { # ] . . . . ", +" ^ / / ( _ : . . . ", +" # < [ } | 1 2 . ", +" 3 4 5 6 7 8 9 0 a b . ", +" 3 3 c d e f g h i j . ", +" k l m n o p q r s j . ", +" t u v w x y z A B C j . ", +" $ . D E F G H I J K j L . ", +" $ . M j N O P Q Q Q j R j ", +" $ $ . S T j U V W X j T T j Y ", +" $ . . Z ` T j j j j j ...T j +. ", +" . . @.#.$.%.%.%.%.%.%.&.*.=.j -. ", +" . . @.;.>.%.%.,.. '.%.%.*.).!.j ~. ", +" . . @.{.*.%.%.%.. ].].%.*.*.^.j j ", +" /.. j (.*.%.'.%.. '.%.%.*._.^.j j ", +" . . . j :.%.'.%.%.'.'.%.<.[.}.j |. ", +" . . # . . j j j T T T T T T T j 1.2. ", +" . ^ 3.O 4.5.6.7.8.9.0.a.b.c.d.e.f. ", +" ] . g.O h.i.j.j.h.h.h.k.l.m.n.o.p. ", +" q.O O r.s.t.$ $ $ u.v.3.w.x.y.u. ", +" z.A.B.C.D.$ $ $ $ u.E.F.& u. ", +" # F.F.D.$ $ $ $ ' G.e.u. ", +" $ $ $ $ $ $ $ "}; diff --git a/swing.properties b/swing.properties new file mode 100644 index 000000000..0f55df0c5 --- /dev/null +++ b/swing.properties @@ -0,0 +1,2 @@ +# uncomment to set the default look and feel to GTK +#swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel diff --git a/tests/control b/tests/control new file mode 100644 index 000000000..855d53e6c --- /dev/null +++ b/tests/control @@ -0,0 +1,21 @@ +Test-Command: java --version +Depends: openjdk-25-jre-headless +Restrictions: allow-stderr, superficial + +Test-Command: javac --version +Depends: openjdk-25-jdk-headless +Restrictions: allow-stderr, superficial + +Tests: hotspot-autopkgtest.sh +Depends: @, jtreg8 (>= 8+2~), libtestng7-java, build-essential, bash, lsb-release, xfwm4, xvfb, xauth, dbus-daemon, libatk-wrapper-java, libatk-wrapper-java-jni +Restrictions: allow-stderr, skippable, flaky, rw-build-tree +Architecture: amd64 arm64 ppc64 ppc64el riscv64 s390x alpha ia64 powerpc ppc64 sh4 x32 armel loong64 mipsel mips64el riscv64 + +Tests: jdk-autopkgtest.sh +Depends: @, jtreg8 (>= 8+2~), libtestng7-java, build-essential, bash, lsb-release, xfwm4, xvfb, xauth, dbus-daemon, libatk-wrapper-java, libatk-wrapper-java-jni +Restrictions: allow-stderr, skippable, flaky, rw-build-tree +Architecture: amd64 arm64 ppc64 ppc64el riscv64 s390x alpha ia64 powerpc ppc64 sh4 x32 armel loong64 mipsel mips64el riscv64 + +Tests: dependencies.sh +Depends: openjdk-25-jre-headless, build-essential, bash +Restrictions: allow-stderr diff --git a/tests/control.in b/tests/control.in new file mode 100644 index 000000000..10e38e6e4 --- /dev/null +++ b/tests/control.in @@ -0,0 +1,21 @@ +Test-Command: java --version +Depends: @basename@-jre-headless +Restrictions: allow-stderr, superficial + +Test-Command: javac --version +Depends: @basename@-jdk-headless +Restrictions: allow-stderr, superficial + +Tests: hotspot-autopkgtest.sh +Depends: @, @jtreg_dep@, @testng_dep@, build-essential, bash, lsb-release, xfwm4, xvfb, xauth, dbus-daemon, libatk-wrapper-java, libatk-wrapper-java-jni +Restrictions: allow-stderr, skippable, flaky, rw-build-tree +Architecture: @jtreg_archs@ + +Tests: jdk-autopkgtest.sh +Depends: @, @jtreg_dep@, @testng_dep@, build-essential, bash, lsb-release, xfwm4, xvfb, xauth, dbus-daemon, libatk-wrapper-java, libatk-wrapper-java-jni +Restrictions: allow-stderr, skippable, flaky, rw-build-tree +Architecture: @jtreg_archs@ + +Tests: dependencies.sh +Depends: @basename@-jre-headless, build-essential, bash +Restrictions: allow-stderr diff --git a/tests/dependencies.in b/tests/dependencies.in new file mode 100755 index 000000000..534597345 --- /dev/null +++ b/tests/dependencies.in @@ -0,0 +1,36 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +host_arch="${DEB_HOST_ARCH:-$(dpkg --print-architecture)}" +jdk_path=$(echo @JDK_DIR@ | sed "s/-[^-]*$/-$host_arch/") + + +echo Check that PC/SC support can be loaded +cat <<EOF > ${AUTOPKGTEST_TMP}/Test.java +import java.util.List; +import javax.smartcardio.CardTerminal; +import javax.smartcardio.CardTerminals; +import javax.smartcardio.TerminalFactory; + +public class Test { + public static void main(String[] args ) throws Throwable { + TerminalFactory factory = TerminalFactory.getDefault(); + List<CardTerminal> terminals = factory.terminals().list(); + System.out.println("Terminals: " + terminals); + } +} +EOF + +${jdk_path}/bin/java -Djava.security.debug=all \ + -cp . ${AUTOPKGTEST_TMP}/Test.java > ${AUTOPKGTEST_TMP}/dependencies-pcsc.log 2>&1 + +if grep "Using PC/SC library" ${AUTOPKGTEST_TMP}/dependencies-pcsc.log; then + echo "Test passed." +else + cat ${AUTOPKGTEST_TMP}/dependencies-pcsc.log + echo "PC/SC library can not be loaded" + exit 1 +fi diff --git a/tests/dependencies.sh b/tests/dependencies.sh new file mode 100755 index 000000000..3dda742f5 --- /dev/null +++ b/tests/dependencies.sh @@ -0,0 +1,36 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +host_arch="${DEB_HOST_ARCH:-$(dpkg --print-architecture)}" +jdk_path=$(echo /usr/lib/jvm/java-25-openjdk-amd64 | sed "s/-[^-]*$/-$host_arch/") + + +echo Check that PC/SC support can be loaded +cat <<EOF > ${AUTOPKGTEST_TMP}/Test.java +import java.util.List; +import javax.smartcardio.CardTerminal; +import javax.smartcardio.CardTerminals; +import javax.smartcardio.TerminalFactory; + +public class Test { + public static void main(String[] args ) throws Throwable { + TerminalFactory factory = TerminalFactory.getDefault(); + List<CardTerminal> terminals = factory.terminals().list(); + System.out.println("Terminals: " + terminals); + } +} +EOF + +${jdk_path}/bin/java -Djava.security.debug=all \ + -cp . ${AUTOPKGTEST_TMP}/Test.java > ${AUTOPKGTEST_TMP}/dependencies-pcsc.log 2>&1 + +if grep "Using PC/SC library" ${AUTOPKGTEST_TMP}/dependencies-pcsc.log; then + echo "Test passed." +else + cat ${AUTOPKGTEST_TMP}/dependencies-pcsc.log + echo "PC/SC library can not be loaded" + exit 1 +fi diff --git a/tests/hotspot b/tests/hotspot new file mode 100755 index 000000000..6930531e4 --- /dev/null +++ b/tests/hotspot @@ -0,0 +1,18 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +problem_list=${AUTOPKGTEST_TMP}/problems.txt +debian/tests/write-problems.sh ${problem_list} test/hotspot/jtreg/ProblemList.txt hotspot + +native_path=$(pwd)/build/images/test/hotspot/jtreg/native +debian/tests/jtreg-autopkgtest.sh hotspot \ + -exclude:${problem_list} \ + -dir:test/hotspot/jtreg \ + -nativepath:${native_path} \ + -k:!stress \ + :tier1 :tier2 + +debian/tests/jtdiff-autopkgtest.sh hotspot diff --git a/tests/hotspot-autopkgtest.in b/tests/hotspot-autopkgtest.in new file mode 100644 index 000000000..ff0396612 --- /dev/null +++ b/tests/hotspot-autopkgtest.in @@ -0,0 +1,34 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +host_arch="${DEB_HOST_ARCH:-$(dpkg --print-architecture)}" +jdk_path=$(echo @JDK_DIR@ | sed "s/-[^-]*$/-$host_arch/") + +if ! $jdk_path/bin/java -version 2>/dev/null; then + echo >&2 "error: $jdk_path/bin/java not found" + exit 1 +fi + +if $jdk_path/bin/java -version 2>/dev/null | grep -F --quiet Zero ; then + echo >&2 "skipping tests with the Zero interpreter" + exit 77 +fi + +HOTSPOT_JTREG_PATH=test/hotspot/jtreg +HOTSPOT_JTREG_NATIVE_PATH=${jdk_path}/testsuite/hotspot/jtreg/native + +problem_list=${AUTOPKGTEST_TMP}/problems.txt +debian/tests/write-problems.sh ${problem_list} ${HOTSPOT_JTREG_PATH}/ProblemList.txt hotspot +cat debian/tests/skip-large-autopkgtest.txt >> ${problem_list} + +ARGS="$*" +JT_DEFAULT_ARGS="-exclude:${problem_list} -k:!stress :tier1" +JT_ARGS=${ARGS:-$JT_DEFAULT_ARGS} + +debian/tests/jtreg-autopkgtest.sh hotspot \ + -dir:${HOTSPOT_JTREG_PATH} \ + -nativepath:${HOTSPOT_JTREG_NATIVE_PATH} \ + $JT_ARGS diff --git a/tests/hotspot-autopkgtest.sh b/tests/hotspot-autopkgtest.sh new file mode 100755 index 000000000..1c97962a0 --- /dev/null +++ b/tests/hotspot-autopkgtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +host_arch="${DEB_HOST_ARCH:-$(dpkg --print-architecture)}" +jdk_path=$(echo /usr/lib/jvm/java-25-openjdk-amd64 | sed "s/-[^-]*$/-$host_arch/") + +if ! $jdk_path/bin/java -version 2>/dev/null; then + echo >&2 "error: $jdk_path/bin/java not found" + exit 1 +fi + +if $jdk_path/bin/java -version 2>/dev/null | grep -F --quiet Zero ; then + echo >&2 "skipping tests with the Zero interpreter" + exit 77 +fi + +HOTSPOT_JTREG_PATH=test/hotspot/jtreg +HOTSPOT_JTREG_NATIVE_PATH=${jdk_path}/testsuite/hotspot/jtreg/native + +problem_list=${AUTOPKGTEST_TMP}/problems.txt +debian/tests/write-problems.sh ${problem_list} ${HOTSPOT_JTREG_PATH}/ProblemList.txt hotspot +cat debian/tests/skip-large-autopkgtest.txt >> ${problem_list} + +ARGS="$*" +JT_DEFAULT_ARGS="-exclude:${problem_list} -k:!stress :tier1" +JT_ARGS=${ARGS:-$JT_DEFAULT_ARGS} + +debian/tests/jtreg-autopkgtest.sh hotspot \ + -dir:${HOTSPOT_JTREG_PATH} \ + -nativepath:${HOTSPOT_JTREG_NATIVE_PATH} \ + $JT_ARGS diff --git a/tests/jaxp b/tests/jaxp new file mode 100755 index 000000000..219bc8507 --- /dev/null +++ b/tests/jaxp @@ -0,0 +1,16 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + + +problem_list=${AUTOPKGTEST_TMP}/problems.txt +debian/tests/write-problems.sh ${problem_list} test/jaxp/ProblemList.txt jaxp + +debian/tests/jtreg-autopkgtest.sh jaxp \ + -exclude:${problem_list} \ + -dir:test/jaxp \ + -k:!stress \ + :tier1 :tier2 +debian/tests/jtdiff-autopkgtest.sh jaxp diff --git a/tests/jdk b/tests/jdk new file mode 100755 index 000000000..266976e77 --- /dev/null +++ b/tests/jdk @@ -0,0 +1,39 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + + +cleanup() { + # kill window manager to clean up (rest will exit automatically) + pid="$(jobs -p)" + if [ -n "$pid" ]; then + xvfbpid="$(pgrep -l -P ${pid} | grep xvfb-run | cut -d' ' -f1)" + if [ -n "$xvfbpid" ]; then + pgrep -l -P ${xvfbpid} | grep xfwm4 | cut -d' ' -f1 | xargs kill -9 + fi + fi +} + +for sig in INT QUIT HUP TERM; do trap "cleanup; trap - $sig EXIT; kill -s $sig "'"$$"' "$sig"; done +trap cleanup EXIT + +export HOME="${AUTOPKGTEST_TMP}" +export XAUTHORITY="${AUTOPKGTEST_TMP}/.Xauthority" +export DISPLAY=:10 +debian/tests/start-xvfb.sh 10 & +sleep 3 + + +problem_list=${AUTOPKGTEST_TMP}/problems.txt +debian/tests/write-problems.sh ${problem_list} test/jdk/ProblemList.txt jdk + +native_path=$(pwd)/build/images/test/jdk/jtreg/native +debian/tests/jtreg-autopkgtest.sh jdk \ + -exclude:${problem_list} \ + -dir:test/jdk \ + -nativepath:${native_path} \ + -k:!stress \ + :tier1 :tier2 +debian/tests/jtdiff-autopkgtest.sh jdk diff --git a/tests/jdk-autopkgtest.in b/tests/jdk-autopkgtest.in new file mode 100644 index 000000000..3cbf44d5d --- /dev/null +++ b/tests/jdk-autopkgtest.in @@ -0,0 +1,55 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +host_arch="${DEB_HOST_ARCH:-$(dpkg --print-architecture)}" +jdk_path=$(echo @JDK_DIR@ | sed "s/-[^-]*$/-$host_arch/") + +if ! $jdk_path/bin/java -version 2>/dev/null; then + echo >&2 "error: $jdk_path/bin/java not found" + exit 1 +fi + +if $jdk_path/bin/java -version 2>/dev/null | grep -F --quiet Zero ; then + echo >&2 "skipping tests with the Zero interpreter" + exit 77 +fi + +cleanup() { + # kill window manager to clean up (rest will exit automatically) + pid="$(jobs -p)" + if [ -n "$pid" ]; then + xvfbpid="$(pgrep -l -P ${pid} | grep xvfb-run | cut -d' ' -f1)" + if [ -n "$xvfbpid" ]; then + pgrep -l -P ${xvfbpid} | grep xfwm4 | cut -d' ' -f1 | xargs kill -9 + fi + fi +} + +for sig in INT QUIT HUP TERM; do trap "cleanup; trap - $sig EXIT; kill -s $sig "'"$$"' "$sig"; done +trap cleanup EXIT + +export HOME="${AUTOPKGTEST_TMP}" +export XAUTHORITY="${AUTOPKGTEST_TMP}/.Xauthority" +export DISPLAY=:10 +debian/tests/start-xvfb.sh 10 & +sleep 3 + +JDK_JTREG_PATH=test/jdk +JDK_JTREG_NATIVE_PATH=${jdk_path}/testsuite/jdk/jtreg/native + +problem_list=${AUTOPKGTEST_TMP}/problems.txt + +debian/tests/write-problems.sh ${problem_list} ${JDK_JTREG_PATH}/ProblemList.txt jdk +cat debian/tests/skip-large-autopkgtest.txt >> ${problem_list} + +ARGS="$*" +JT_DEFAULT_ARGS="-exclude:${problem_list} -k:!stress :tier1" +JT_ARGS=${ARGS:-$JT_DEFAULT_ARGS} + +debian/tests/jtreg-autopkgtest.sh jdk \ + -dir:${JDK_JTREG_PATH} \ + -nativepath:${JDK_JTREG_NATIVE_PATH} \ + $JT_ARGS diff --git a/tests/jdk-autopkgtest.sh b/tests/jdk-autopkgtest.sh new file mode 100755 index 000000000..4e152f851 --- /dev/null +++ b/tests/jdk-autopkgtest.sh @@ -0,0 +1,55 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +host_arch="${DEB_HOST_ARCH:-$(dpkg --print-architecture)}" +jdk_path=$(echo /usr/lib/jvm/java-25-openjdk-amd64 | sed "s/-[^-]*$/-$host_arch/") + +if ! $jdk_path/bin/java -version 2>/dev/null; then + echo >&2 "error: $jdk_path/bin/java not found" + exit 1 +fi + +if $jdk_path/bin/java -version 2>/dev/null | grep -F --quiet Zero ; then + echo >&2 "skipping tests with the Zero interpreter" + exit 77 +fi + +cleanup() { + # kill window manager to clean up (rest will exit automatically) + pid="$(jobs -p)" + if [ -n "$pid" ]; then + xvfbpid="$(pgrep -l -P ${pid} | grep xvfb-run | cut -d' ' -f1)" + if [ -n "$xvfbpid" ]; then + pgrep -l -P ${xvfbpid} | grep xfwm4 | cut -d' ' -f1 | xargs kill -9 + fi + fi +} + +for sig in INT QUIT HUP TERM; do trap "cleanup; trap - $sig EXIT; kill -s $sig "'"$$"' "$sig"; done +trap cleanup EXIT + +export HOME="${AUTOPKGTEST_TMP}" +export XAUTHORITY="${AUTOPKGTEST_TMP}/.Xauthority" +export DISPLAY=:10 +debian/tests/start-xvfb.sh 10 & +sleep 3 + +JDK_JTREG_PATH=test/jdk +JDK_JTREG_NATIVE_PATH=${jdk_path}/testsuite/jdk/jtreg/native + +problem_list=${AUTOPKGTEST_TMP}/problems.txt + +debian/tests/write-problems.sh ${problem_list} ${JDK_JTREG_PATH}/ProblemList.txt jdk +cat debian/tests/skip-large-autopkgtest.txt >> ${problem_list} + +ARGS="$*" +JT_DEFAULT_ARGS="-exclude:${problem_list} -k:!stress :tier1" +JT_ARGS=${ARGS:-$JT_DEFAULT_ARGS} + +debian/tests/jtreg-autopkgtest.sh jdk \ + -dir:${JDK_JTREG_PATH} \ + -nativepath:${JDK_JTREG_NATIVE_PATH} \ + $JT_ARGS diff --git a/tests/jtdiff-autopkgtest.in b/tests/jtdiff-autopkgtest.in new file mode 100644 index 000000000..9f076f5e2 --- /dev/null +++ b/tests/jtdiff-autopkgtest.in @@ -0,0 +1,58 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +testsuite=$1 +shift + +if [ -z "${AUTOPKGTEST_TMP+x}" ] || [ -z "${AUTOPKGTEST_ARTIFACTS+x}" ]; then + echo "Environment variables AUTOPKGTEST_TMP and AUTOPKGTEST_ARTIFACTS must be set" >&2 + exit 1 +fi + +host_arch=${DEB_HOST_ARCH:-$(dpkg --print-architecture)} + +if grep -q -w "${host_arch}" debian/tests/hotspot-archs; then + default_vm=hotspot +else + default_vm=zero +fi + +vmname=${VMNAME:-${default_vm}} + +jt_report_tb="@doc_dir@/test-${host_arch}/jtreport-${vmname}.tar.gz" + +if [ ! -f "${jt_report_tb}" ]; then + echo "Unable to compare jtreg results: no build jtreport found for ${vmname}/${host_arch}." + echo "Reason: '${jt_report_tb}' does not exist." + exit 77 +fi + +# create directories to hold the results +mkdir -p "${AUTOPKGTEST_ARTIFACTS}/${testsuite}" +mkdir -p "${AUTOPKGTEST_TMP}/openjdk-pkg-jtreg-report" + +current_report_dir="${AUTOPKGTEST_ARTIFACTS}/${testsuite}" +previous_report_dir="${AUTOPKGTEST_TMP}/openjdk-pkg-jtreg-report/${testsuite}" + +# extract testsuite results from openjdk package +[ -d "${previous_report_dir}" ] || \ + tar -xf "${jt_report_tb}" --strip-components=1 -C "${AUTOPKGTEST_TMP}/openjdk-pkg-jtreg-report" + + +jtdiff -o "${current_report_dir}/jtdiff.html" "${previous_report_dir}/JTreport" "${current_report_dir}/JTreport" || true +jtdiff "${previous_report_dir}/JTreport" "${current_report_dir}/JTreport" | tee "${current_report_dir}/jtdiff.txt" || true + +# create jdiff super-diff structure +jtdiff_dir="${AUTOPKGTEST_TMP}/jtdiff-${testsuite}/${host_arch}" +mkdir -p "${jtdiff_dir}/"{1,2} "${current_report_dir}/jtdiff-super" +ln -sf "${previous_report_dir}/"[0-9] "${jtdiff_dir}/1/" +ln -sf "${current_report_dir}/"[0-9] "${jtdiff_dir}/2/" + +# run jtdiff super-diff +jtdiff -o "${current_report_dir}/jtdiff-super/" -s "${AUTOPKGTEST_TMP}/jtdiff-${testsuite}/" || true + +# fail if we detect a regression +if egrep '^(pass|---) +(fail|error)' "${current_report_dir}/jtdiff.txt"; then exit 1; else exit 0; fi diff --git a/tests/jtdiff-autopkgtest.sh b/tests/jtdiff-autopkgtest.sh new file mode 100755 index 000000000..f22956ab3 --- /dev/null +++ b/tests/jtdiff-autopkgtest.sh @@ -0,0 +1,58 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +testsuite=$1 +shift + +if [ -z "${AUTOPKGTEST_TMP+x}" ] || [ -z "${AUTOPKGTEST_ARTIFACTS+x}" ]; then + echo "Environment variables AUTOPKGTEST_TMP and AUTOPKGTEST_ARTIFACTS must be set" >&2 + exit 1 +fi + +host_arch=${DEB_HOST_ARCH:-$(dpkg --print-architecture)} + +if grep -q -w "${host_arch}" debian/tests/hotspot-archs; then + default_vm=hotspot +else + default_vm=zero +fi + +vmname=${VMNAME:-${default_vm}} + +jt_report_tb="/usr/share/doc/openjdk-25-jre-headless//test-${host_arch}/jtreport-${vmname}.tar.gz" + +if [ ! -f "${jt_report_tb}" ]; then + echo "Unable to compare jtreg results: no build jtreport found for ${vmname}/${host_arch}." + echo "Reason: '${jt_report_tb}' does not exist." + exit 77 +fi + +# create directories to hold the results +mkdir -p "${AUTOPKGTEST_ARTIFACTS}/${testsuite}" +mkdir -p "${AUTOPKGTEST_TMP}/openjdk-pkg-jtreg-report" + +current_report_dir="${AUTOPKGTEST_ARTIFACTS}/${testsuite}" +previous_report_dir="${AUTOPKGTEST_TMP}/openjdk-pkg-jtreg-report/${testsuite}" + +# extract testsuite results from openjdk package +[ -d "${previous_report_dir}" ] || \ + tar -xf "${jt_report_tb}" --strip-components=1 -C "${AUTOPKGTEST_TMP}/openjdk-pkg-jtreg-report" + + +jtdiff -o "${current_report_dir}/jtdiff.html" "${previous_report_dir}/JTreport" "${current_report_dir}/JTreport" || true +jtdiff "${previous_report_dir}/JTreport" "${current_report_dir}/JTreport" | tee "${current_report_dir}/jtdiff.txt" || true + +# create jdiff super-diff structure +jtdiff_dir="${AUTOPKGTEST_TMP}/jtdiff-${testsuite}/${host_arch}" +mkdir -p "${jtdiff_dir}/"{1,2} "${current_report_dir}/jtdiff-super" +ln -sf "${previous_report_dir}/"[0-9] "${jtdiff_dir}/1/" +ln -sf "${current_report_dir}/"[0-9] "${jtdiff_dir}/2/" + +# run jtdiff super-diff +jtdiff -o "${current_report_dir}/jtdiff-super/" -s "${AUTOPKGTEST_TMP}/jtdiff-${testsuite}/" || true + +# fail if we detect a regression +if egrep '^(pass|---) +(fail|error)' "${current_report_dir}/jtdiff.txt"; then exit 1; else exit 0; fi diff --git a/tests/jtreg-autopkgtest.in b/tests/jtreg-autopkgtest.in new file mode 100755 index 000000000..7adc49a4a --- /dev/null +++ b/tests/jtreg-autopkgtest.in @@ -0,0 +1,165 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +testsuite=$1 +shift + +if [ -z "${AUTOPKGTEST_TMP+x}" ] || [ -z "${AUTOPKGTEST_ARTIFACTS+x}" ]; then + echo "Environment variables AUTOPKGTEST_TMP and AUTOPKGTEST_ARTIFACTS must be set" >&2 + exit 1 +fi + +ulimit -c unlimited + +host_arch="${DEB_HOST_ARCH:-$(dpkg --print-architecture)}" + +if [ -z "${JDK_TO_TEST+x}" ]; then + JDK_TO_TEST=$(echo @JDK_DIR@ | sed "s/-[^-]*$/-$host_arch/") +fi + +if [ -z "${BOOTJDK_HOME+x}" ]; then + BOOTJDK_HOME=${JDK_TO_TEST} +fi + +jtreg_version="$(dpkg-query -W @jtreg_pkg@ | cut -f2)" + +# set additional jtreg options +jt_options="${JTREG_OPTIONS:-}" +if [[ "armel" == *"${host_arch}"* ]]; then + jt_options+=" -Xmx256M" +fi +if [[ "s390x" != *"${host_arch}"* ]]; then + jt_options+=" -agentvm" +fi +if dpkg --compare-versions ${jtreg_version} ge 4.2; then + njobs=auto + for opt in ${DEB_BUILD_OPTIONS:-}; do + if test "${opt#parallel=}" != "$opt"; then + njobs="${opt#parallel=}" + fi + done + jt_options+=" -conc:$njobs" +fi + +# timeouts should be higher for zero builds +case ${host_arch} in + loong64) timeout=30;; + riscv64) timeout=30;; + *) timeout=10;; +esac + +# check java binary +if [ ! -x "${JDK_TO_TEST}/bin/java" ]; then + echo "Error: JDK_TO_TEST: '${JDK_TO_TEST}/bin/java' is not an executable." >&2 + exit 1 +fi + +if [ ! -x "${BOOTJDK_HOME}/bin/java" ]; then + echo "Error: BOOTJDK_HOME: '${BOOTJDK_HOME}/bin/java' is not an executable." >&2 + exit 1 +fi + +# restrict the tests to a few archs (set from debian/rules) +if ! echo "${host_arch}" | grep -qE "^($(echo @jtreg_archs@ | tr ' ' '|'))$"; then + echo "Error: ${host_arch} is not on the jtreg_archs list, ignoring it." + exit 77 +fi + +jtreg_processes() { + ps x -ww -o pid,ppid,args \ + | awk '$2 == 1 && $3 ~ /^\/scratch/' \ + | sed "s,${JDK_TO_TEST},<sdkimg>,g;s,$(pwd),<pwd>,g" +} + +jtreg_pids() { + ps x --no-headers -ww -o pid,ppid,args \ + | awk "\$2 == 1 && \$3 ~ /^${JDK_TO_TEST//\//\\/}/ {print \$1}" +} + +cleanup() { + # kill testsuite processes still hanging + pids="$(jtreg_pids)" + if [ -n "$pids" ]; then + echo "[$0] killing processes..." + jtreg_processes + kill -1 $pids + sleep 2 + pids="$(jtreg_pids)" + if [ -n "$pids" ]; then + echo "[$0] try harder..." + jtreg_processes + kill -9 $pids + sleep 2 + fi + else + echo "[$0] nothing to cleanup" + fi + pids="$(jtreg_pids)" + if [ -n "$pids" ]; then + echo "[$0] leftover processes..." + $(jtreg_processes) + fi +} + +trap "cleanup" EXIT INT TERM ERR + +jtwork_dir="${AUTOPKGTEST_TMP}/${testsuite}/JTwork" +output_dir="${AUTOPKGTEST_ARTIFACTS}/${testsuite}/" + +# retry tests with "fail" or "error" status at most 3 times +for i in 0 1 2; do + # save each try under its own folder to preserve history + report_path="${i}/JTreport" + report_dir="${output_dir}/${report_path}" +# see make/RunTests.gmk for a set of good options + jtreg ${jt_options} \ + -verbose:summary \ + -automatic \ + -retain:none \ + -ignore:quiet \ + -timeout:${timeout} \ + -workDir:"${jtwork_dir}" \ + -reportDir:"${report_dir}" \ + -jdk:${JDK_TO_TEST} \ + -vmoption:-Dtest.boot.jdk=${BOOTJDK_HOME} \ + -vmoption:-XX:MaxRAMPercentage=25 \ + -vmoption:-Duser.home=${AUTOPKGTEST_TMP} \ + -vmoption:-Djava.io.tmpdir=${AUTOPKGTEST_TMP} \ + -e:NSS_DEFAULT_DB_TYPE=sql \ + ${on_retry:-} $@ \ + && exit_code=0 || exit_code=$? + + # copy .jtr files from failed tests for latter debugging + find "${jtwork_dir}" -name '*.jtr' -exec egrep -q '^execStatus=[^Pass]' {} \; -printf "%P\n" \ + | while IF= read -r jtr; do + jtr_dir=$(dirname "${output_dir}/JTwork/${jtr}") + mkdir -p "${jtr_dir}" + cp --update --preserve --backup=numbered "${jtwork_dir}/${jtr}" "${output_dir}/JTwork/${jtr}" + # copy all generated hs_err_pid log into the jtr's directory to easy debugging + if grep -qhE 'hs_err_pid[0-9]+\.log' "${output_dir}/JTwork/${jtr}"; then + grep -hEo '/[^ ]*/hs_err_pid[0-9]+\.log' "${output_dir}/JTwork/${jtr}" \ + | xargs cp --update --preserve --backup=numbered -t "${jtr_dir}" \ + || echo "Warning: unable to find hs_err log for ${jtr}" + fi + done + + # break if jtdiff reports no difference from previous run + # also deletes the just created JTreport + # DISABLED: don't use it for now as flaky tests could still pass given more retries + #jtdiff "${output_dir}/JTreport" "$report_dir" >/dev/null 2>&1 \ + # && rm -rf "${report_dir}" && break + + # link latest JTreport to output_dir + ln -sf -t "${output_dir}" "${report_path}" + + # if all test passed there is not need for a retry + if [ "x${exit_code}" == "x0" ]; then break; fi + + # only retry tests with fail/error status + on_retry="-status:fail,error" +done + +exit $exit_code diff --git a/tests/jtreg-autopkgtest.sh b/tests/jtreg-autopkgtest.sh new file mode 100755 index 000000000..72f963bb1 --- /dev/null +++ b/tests/jtreg-autopkgtest.sh @@ -0,0 +1,165 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +testsuite=$1 +shift + +if [ -z "${AUTOPKGTEST_TMP+x}" ] || [ -z "${AUTOPKGTEST_ARTIFACTS+x}" ]; then + echo "Environment variables AUTOPKGTEST_TMP and AUTOPKGTEST_ARTIFACTS must be set" >&2 + exit 1 +fi + +ulimit -c unlimited + +host_arch="${DEB_HOST_ARCH:-$(dpkg --print-architecture)}" + +if [ -z "${JDK_TO_TEST+x}" ]; then + JDK_TO_TEST=$(echo /usr/lib/jvm/java-25-openjdk-amd64 | sed "s/-[^-]*$/-$host_arch/") +fi + +if [ -z "${BOOTJDK_HOME+x}" ]; then + BOOTJDK_HOME=${JDK_TO_TEST} +fi + +jtreg_version="$(dpkg-query -W jtreg8 | cut -f2)" + +# set additional jtreg options +jt_options="${JTREG_OPTIONS:-}" +if [[ "armel" == *"${host_arch}"* ]]; then + jt_options+=" -Xmx256M" +fi +if [[ "s390x" != *"${host_arch}"* ]]; then + jt_options+=" -agentvm" +fi +if dpkg --compare-versions ${jtreg_version} ge 4.2; then + njobs=auto + for opt in ${DEB_BUILD_OPTIONS:-}; do + if test "${opt#parallel=}" != "$opt"; then + njobs="${opt#parallel=}" + fi + done + jt_options+=" -conc:$njobs" +fi + +# timeouts should be higher for zero builds +case ${host_arch} in + loong64) timeout=30;; + riscv64) timeout=30;; + *) timeout=10;; +esac + +# check java binary +if [ ! -x "${JDK_TO_TEST}/bin/java" ]; then + echo "Error: JDK_TO_TEST: '${JDK_TO_TEST}/bin/java' is not an executable." >&2 + exit 1 +fi + +if [ ! -x "${BOOTJDK_HOME}/bin/java" ]; then + echo "Error: BOOTJDK_HOME: '${BOOTJDK_HOME}/bin/java' is not an executable." >&2 + exit 1 +fi + +# restrict the tests to a few archs (set from debian/rules) +if ! echo "${host_arch}" | grep -qE "^($(echo amd64 arm64 ppc64 ppc64el riscv64 s390x alpha ia64 powerpc ppc64 sh4 x32 armel loong64 mipsel mips64el riscv64 | tr ' ' '|'))$"; then + echo "Error: ${host_arch} is not on the jtreg_archs list, ignoring it." + exit 77 +fi + +jtreg_processes() { + ps x -ww -o pid,ppid,args \ + | awk '$2 == 1 && $3 ~ /^\/scratch/' \ + | sed "s,${JDK_TO_TEST},<sdkimg>,g;s,$(pwd),<pwd>,g" +} + +jtreg_pids() { + ps x --no-headers -ww -o pid,ppid,args \ + | awk "\$2 == 1 && \$3 ~ /^${JDK_TO_TEST//\//\\/}/ {print \$1}" +} + +cleanup() { + # kill testsuite processes still hanging + pids="$(jtreg_pids)" + if [ -n "$pids" ]; then + echo "[$0] killing processes..." + jtreg_processes + kill -1 $pids + sleep 2 + pids="$(jtreg_pids)" + if [ -n "$pids" ]; then + echo "[$0] try harder..." + jtreg_processes + kill -9 $pids + sleep 2 + fi + else + echo "[$0] nothing to cleanup" + fi + pids="$(jtreg_pids)" + if [ -n "$pids" ]; then + echo "[$0] leftover processes..." + $(jtreg_processes) + fi +} + +trap "cleanup" EXIT INT TERM ERR + +jtwork_dir="${AUTOPKGTEST_TMP}/${testsuite}/JTwork" +output_dir="${AUTOPKGTEST_ARTIFACTS}/${testsuite}/" + +# retry tests with "fail" or "error" status at most 3 times +for i in 0 1 2; do + # save each try under its own folder to preserve history + report_path="${i}/JTreport" + report_dir="${output_dir}/${report_path}" +# see make/RunTests.gmk for a set of good options + jtreg ${jt_options} \ + -verbose:summary \ + -automatic \ + -retain:none \ + -ignore:quiet \ + -timeout:${timeout} \ + -workDir:"${jtwork_dir}" \ + -reportDir:"${report_dir}" \ + -jdk:${JDK_TO_TEST} \ + -vmoption:-Dtest.boot.jdk=${BOOTJDK_HOME} \ + -vmoption:-XX:MaxRAMPercentage=25 \ + -vmoption:-Duser.home=${AUTOPKGTEST_TMP} \ + -vmoption:-Djava.io.tmpdir=${AUTOPKGTEST_TMP} \ + -e:NSS_DEFAULT_DB_TYPE=sql \ + ${on_retry:-} $@ \ + && exit_code=0 || exit_code=$? + + # copy .jtr files from failed tests for latter debugging + find "${jtwork_dir}" -name '*.jtr' -exec egrep -q '^execStatus=[^Pass]' {} \; -printf "%P\n" \ + | while IF= read -r jtr; do + jtr_dir=$(dirname "${output_dir}/JTwork/${jtr}") + mkdir -p "${jtr_dir}" + cp --update --preserve --backup=numbered "${jtwork_dir}/${jtr}" "${output_dir}/JTwork/${jtr}" + # copy all generated hs_err_pid log into the jtr's directory to easy debugging + if grep -qhE 'hs_err_pid[0-9]+\.log' "${output_dir}/JTwork/${jtr}"; then + grep -hEo '/[^ ]*/hs_err_pid[0-9]+\.log' "${output_dir}/JTwork/${jtr}" \ + | xargs cp --update --preserve --backup=numbered -t "${jtr_dir}" \ + || echo "Warning: unable to find hs_err log for ${jtr}" + fi + done + + # break if jtdiff reports no difference from previous run + # also deletes the just created JTreport + # DISABLED: don't use it for now as flaky tests could still pass given more retries + #jtdiff "${output_dir}/JTreport" "$report_dir" >/dev/null 2>&1 \ + # && rm -rf "${report_dir}" && break + + # link latest JTreport to output_dir + ln -sf -t "${output_dir}" "${report_path}" + + # if all test passed there is not need for a retry + if [ "x${exit_code}" == "x0" ]; then break; fi + + # only retry tests with fail/error status + on_retry="-status:fail,error" +done + +exit $exit_code diff --git a/tests/langtools b/tests/langtools new file mode 100755 index 000000000..def751688 --- /dev/null +++ b/tests/langtools @@ -0,0 +1,15 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +problem_list=${AUTOPKGTEST_TMP}/problems.txt +debian/tests/write-problems.sh ${problem_list} test/langtools/ProblemList.txt langtools + +debian/tests/jtreg-autopkgtest.sh langtools \ + -exclude:${problem_list} \ + -dir:test/langtools \ + -k:!stress \ + :tier1 :tier2 +debian/tests/jtdiff-autopkgtest.sh langtools diff --git a/tests/problems.csv b/tests/problems.csv new file mode 100644 index 000000000..a17087f30 --- /dev/null +++ b/tests/problems.csv @@ -0,0 +1,111 @@ +Test,Bug,Comment,Packages,Arch,Release +Error: runtime/Unsafe/InternalErrorTest.java,JDK-8335238,"To investigate, not critical for security release – JDK-22 will expire before OO release",:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,i386,:release-all +FAILED: compiler/arguments/CheckCICompilerCount.java,,"Existing failure (exit code 0, expected 1)",:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,i386,:release-all +FAILED: compiler/codecache/MHIntrinsicAllocFailureTest.java,JDK-8298947,The issue only happens on armhf platform. ,:openjdk-17:openjdk-21,armhf,:release-all +FAILED: gtest/GTestWrapper.java,,"17:UninitializedDoubleElementWorkerDataArrayTest.print_summary_on_test_vm, ",:openjdk-17:openjdk-21,i386,:release-all +FAILED: java/foreign/StdLibTest.java,,Ignore test failure in the preview api,:openjdk-21,:i386,:release-all +FAILED: java/foreign/TestAddressDereference.java,,Ignore test failure in the preview api,:openjdk-21,:i386,:release-all +FAILED: java/foreign/TestIllegalLink.java,,Ignore test failure in the preview api,:openjdk-21,:i386,:release-all +FAILED: java/foreign/TestLinker.java,,Ignore test failure in the preview api,:openjdk-21,:i386,:release-all +FAILED: java/foreign/TestSegments.java,,Ignore test failure in the preview api,:openjdk-21,:i386,:release-all +FAILED: java/foreign/TestUpcallHighArity.java,,Ignore test failure in the preview api,:openjdk-21,:i386,:release-all +FAILED: java/foreign/TestUpcallStructScope.java,,Ignore test failure in the preview api,:openjdk-21,:i386,:release-all +FAILED: java/io/File/createTempFile/TargetDirectory.java,JDK-8166162,Container issue,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/io/File/GetXSpace.java,,"Container issue, disk space size exceeds 32 bit integer",:openjdk-17:openjdk-21:,:i386:armhf,:release-all +FAILED: java/nio/channels/FileChannel/directio/DirectIOTest.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/channels/FileChannel/directio/PreadDirect.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/channels/FileChannel/directio/PwriteDirect.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/channels/FileChannel/directio/ReadDirect.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/channels/FileChannel/directio/WriteDirect.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/attribute/AclFileAttributeView/Basic.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/attribute/BasicFileAttributeView/CreationTime.java,JDK-8166162,Container issue,:openjdk-22,i386,:release-all +FAILED: java/nio/file/attribute/BasicFileAttributeView/SetTimesNanos.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/attribute/DosFileAttributeView/Basic.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/attribute/PosixFileAttributeView/Basic.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/attribute/UserDefinedFileAttributeView/Basic.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/Files/CheckPermissions.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/Files/CopyAndMove.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/Files/CopyMoveVariations.java,JDK-8166162,Container issue,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/Files/FileAttributes.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/Files/InterruptCopy.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/Files/Misc.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/Files/TemporaryFiles.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: java/nio/file/FileStore/Basic.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: com/sun/net/httpserver/simpleserver/DocRootDirPermissionsTest.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: runtime/cds/appcds/jcmd/JCmdTestDynamicDump.java,,flaky test (?) existing comment,:openjdk-17,:arch-all,:release-all +FAILED: runtime/cds/appcds/jcmd/JCmdTestFileSafety.java,,flaky test (?) existing comment,:openjdk-17,i386:arm64:amd64:ppc64el,:release-all +FAILED: runtime/cds/appcds/jcmd/JCmdTestStaticDump.java,,flaky test (?) existing comment,:openjdk-17,:arch-all,:release-all +FAILED: runtime/ErrorHandling/MachCodeFramesInErrorFile.java,,java.lang.InternalError: a fault occurred in a recent unsafe memory access operation in compiled Java code at java.base/java.lang.Long.toHexString(Long.java:309) at,:openjdk-17:openjdk-21,armhf,:release-all +FAILED: runtime/jni/nativeStack/TestNativeStack.java,JDK-8312016,"Backport fix (do not add patch, the fix just disables the test)",:openjdk-lts:openjdk-11:openjdk-17,armhf,:release-all +FAILED: runtime/LoadClass/LongBCP.java,JDK-8166162,Container issue,:openjdk-lts:openjdk-11:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: runtime/Monitor/ConcurrentDeflation.java,,LockingMode == 0 (LM_MONITOR) is not fully implemented on this architectureError: Could not create the Java Virtual Machine.,:openjdk-21,armhf,:release-all +FAILED: runtime/NMT/VirtualAllocCommitMerge.java,JDK-8309698,P4 bug (existing issue),:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,s390x,:release-all +FAILED: serviceability/AsyncGetCallTrace/MyPackage/ASGCTBaseTest.java,JDK-8303168,Existing bug,:openjdk-21,armhf,:release-all +FAILED: tools/jlink/JLinkTest.java,JDK-8240349,Bugfix failed for i386 (P4 bug),:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,i386,:release-all +FAILED: jdk/javadoc/doclet/dupThrowsTags/TestDupThrowsTags.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/T6735320/T6735320.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testBadHtml/TestBadHtml.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testBadPackageFileInJar/TestBadPackageFileInJar.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testHtmlTableStyles/TestHtmlTableStyles.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testLinkOption/TestLinkOption.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testNonInlineHtmlTagRemoval/TestNonInlineHtmlTagRemoval.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testPackageHtml/TestPackageHtml.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testParamTaglet/TestParamTaglet.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testRelativeLinks/TestRelativeLinks.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testSeeTag/TestSeeTag.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testStylesheet/TestStylesheet.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testSummaryTag/TestSummaryTag.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testSupplementary/TestSupplementary.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testValueTag/TestValueTag.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/doclet/testWarnings/TestWarnings.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/tool/doclint/DocLintTest.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: jdk/javadoc/tool/modules/Modules.java,,tests failing due to disable-doclint-by-default.diff (reproducible build maintainer patch),:openjdk-lts:openjdk-11,:arch-all,:release-all +FAILED: sun/security/ec/TestEC.java,,"New failure in CI, passes locally",:openjdk-lts:openjdk-11,:amd64:arm64,:release-all +FAILED: runtime/NMT/SafepointPollingPages.java,,ThreadLocalHandshakes not yet supported on this platform. Disable test,:openjdk-lts:openjdk-11,:armhf,:release-all +FAILED: serviceability/attach/ConcAttachTest.java,,java.lang.RuntimeException: Process is still alive. Can't get its output.,:openjdk-lts:openjdk-11,:armhf,:release-all +FAILED: serviceability/attach/RemovingUnixDomainSocketTest.java,,java.lang.RuntimeException: Process is still alive. Can't get its output.,:openjdk-lts:openjdk-11,:armhf,:release-all +FAILED: runtime/cds/appcds/jcmd/JCmdTestStaticDump.java,,Lingered App not found (CI),:openjdk-17,:amd64,:release-all +FAILED: runtime/appcds/sharedStrings/LargePages.java,, passes locally. class not found JarBuilder. I have seen it several times - the class file that is being produced in compilation step can not be read from disk in CI. ,:openjdk-lts:openjdk-11,:arm64,:focal +FAILED: runtime/appcds/sharedStrings/IncompatibleOptions.java,, passes locally. NoClassDefFound: TestCommon. Same as above.,:openjdk-lts:openjdk-11,:arm64,:focal +FAILED: java/foreign/StdLibTest.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: java/foreign/TestIllegalLink.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: java/foreign/TestDowncallStack.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: java/foreign/TestDowncallScope.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: java/foreign/TestSegments.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: java/foreign/TestLinker.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: java/foreign/nested/TestNested.java,CODETOOLS-7903948, test is compiled without --enable-preview flag,:openjdk-21,:arch-all,:release-all +FAILED: java/foreign/TestAddressDereference.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: java/foreign/TestUpcallHighArity.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: java/foreign/TestUpcallStructScope.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: java/foreign/TestUpcallScope.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: java/foreign/TestUpcallAsync.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: java/foreign/TestUpcallStack.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: java/foreign/TestVarArgs.java,, asserts due to the invalid structure size. Ignore as this is a preview API and the issue does not occur in openjdk-22. I will add it to the problemlist.,:openjdk-21,:armhf,:release-all +FAILED: runtime/os/TestTrimNative.java#trimNative,, java.lang.RuntimeException: We found fewer (periodic) trim lines in UL log than expected (expected at least 13 found 11). This looks like a flaky test - it asserts number of lines from the periodic trimmer e.g. src/hotspot/share/runtime/trimNativeHeap.hpp:56 which causes the test to fail due to the slow VM. Test passes locally.,:openjdk-21,:armhf,:release-all +FAILED: sun/security/util/Debug/DebugOptions.java,JDK-8339713,Stack overflow error on 32-bit platforms,:openjdk-17:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:armhf:i386:s390x,:release-all +Error: jdk/jshell/TerminalNoExecTest.java,,BackingStoreException: Couldn't get file lock - possibly because the LP (non-root) container has no home directory,:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:arch-all,:release-all +FAILED: applications/ctw/modules/jdk_jfr.java,JDK-8352567, Unimplemented SharedRuntime:generate_jfr_write_checkpoint for S390x, :openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:s390x,:release-all +Error: serviceability/jvmti/thread/SuspendThreadList/suspendthrdlst01/suspendthrdlst01.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: serviceability/jvmti/thread/ResumeThreadList/resumethrdlst02/resumethrdlst02.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: serviceability/jvmti/thread/SuspendThread/suspendthrd01/suspendthrd01.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: serviceability/jvmti/thread/ResumeThreadList/resumethrdlst01/resumethrdlst01.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: serviceability/jvmti/thread/ResumeThread/resumethrd02/resumethrd02.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: serviceability/jvmti/thread/ResumeThread/resumethrd01/resumethrd01.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: serviceability/jvmti/thread/GetThreadState/thrstat02/thrstat02.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: serviceability/jvmti/thread/GetCurrentContendedMonitor/contmon02/contmon02.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: serviceability/jvmti/thread/GetCurrentContendedMonitor/contmon01/contmon01.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: serviceability/jvmti/SuspendWithCurrentThread/SuspendWithCurrentThread.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: runtime/NMT/SummaryDiffThreadCount.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: runtime/lockStack/TestStackWalk.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: compiler/loopopts/TestRemoveEmptyLoop.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +Error: jdk/internal/shellsupport/doc/JavadocHelperTest.java,,Takes too long on loong64,:openjdk-21:openjdk-25:openjdk-26:openjdk-27:openjdk-28:,:loong64,:release-all +FAILED: tools/javac/tree/SourceDocTreeScannerTest.java,JDK-8332619,Test runs out of stack space on 32-bit platforms,:openjdk-21,:armhf:i386,:release-all +FAILED: tools/javac/tree/SourceTreeScannerTest.java,JDK-8332619,Test runs out of stack space on 32-bit platforms,:openjdk-21,:armhf:i386,:release-all +FAILED: tools/javac/tree/JavacTreeScannerTest.java,JDK-8332619,Test runs out of stack space on 32-bit platforms,:openjdk-21,:armhf:i386,:release-all +FAILED: jdk/jfr/event/oldobject/TestDFSWithSmallStack.java,JDK-8332619,Test runs out of stack space on 32-bit platforms,:openjdk-21,:armhf:i386,:release-all +FAILED: tools/javac/patterns/SOEDeeplyNestedBlocksTest.java,JDK-8332619,Test runs out of stack space due to brittle design,:openjdk-21,:armhf:i386:s390x,:release-all +FAILED: tools/javac/tree/TreePosTest.java,JDK-8332619,Test runs out of stack space on 32-bit platforms,:openjdk-21,:armhf:i386,:release-all +FAILED: java/time/test/java/time/format/TestUTCParse.java,JDK-8381709,jtreg test initialization issue,:openjdk-11,:arch-all,:release-all +FAILED: serviceability/jvmti/GetModulesInfo/JvmtiGetAllModulesTest.java,JDK-8386138,Problemlisted upstream,:openjdk-27:,arch-all,:release-all +FAILED: compiler/loopopts/superword/TestDoNotFilterNaNSummands.java,JDK-8370408,Known issue in s390x C2,:openjdk-25::openjdk-26::openjdk-27::openjdk-28:,s390x:,:release-all +FAILED: compiler/loopopts/superword/TestMemorySegmentFilterSummands.java,JDK-8370408,Known issue in s390x C2,:openjdk-25::openjdk-26::openjdk-27::openjdk-28:,s390x:,:release-all diff --git a/tests/skip-large-autopkgtest.txt b/tests/skip-large-autopkgtest.txt new file mode 100644 index 000000000..9fba3f284 --- /dev/null +++ b/tests/skip-large-autopkgtest.txt @@ -0,0 +1,7 @@ +# The list of tier1 tests that require large amount of memory >=2G + +runtime/cds/NonJVMVariantLocation.java 0000000 generic-all +runtime/jni/checked/TestLargeUTF8Length.java 0000000 generic-all +java/foreign/TestLargeSegmentCopy.java 0000000 generic-all +java/foreign/TestStringEncodingJumbo.java 0000000 generic-all +java/util/HashMap/WhiteBoxResizeTest.java 0000000 generic-all diff --git a/tests/start-xvfb.sh b/tests/start-xvfb.sh new file mode 100755 index 000000000..8c5fe4bed --- /dev/null +++ b/tests/start-xvfb.sh @@ -0,0 +1,21 @@ +#!/bin/bash +set -o errexit +set -o errtrace +set -o pipefail +set -o nounset + +if [ -z "${AUTOPKGTEST_TMP+x}" ] || [ -z "${AUTOPKGTEST_ARTIFACTS+x}" ]; then + echo "Environment variables AUTOPKGTEST_TMP and AUTOPKGTEST_ARTIFACTS must be set" >&2 + exit 1 +fi +export XAUTHORITY="${AUTOPKGTEST_TMP}/.Xauthority" +export XDG_CACHE_HOME="${AUTOPKGTEST_TMP}" +export XDG_DATA_HOME="${AUTOPKGTEST_TMP}" +export XDG_CONFIG_HOME="${AUTOPKGTEST_TMP}" +export XDG_RUNTIME_DIR=`mktemp -d` + +exec dbus-run-session xvfb-run --server-num=${1:-10} \ + --error-file="${AUTOPKGTEST_ARTIFACTS}/xvfb-run.log" \ + --auth-file=${XAUTHORITY} \ + --server-args="-fbdir ${AUTOPKGTEST_TMP} -pixdepths 8 16 24 32 -extension GLX -screen 0 1600x900x24" \ + xfwm4 diff --git a/tests/write-problems.in b/tests/write-problems.in new file mode 100644 index 000000000..945d5e3c5 --- /dev/null +++ b/tests/write-problems.in @@ -0,0 +1,13 @@ +#!/bin/bash + +problem_list=$1 +upstream_problems=$2 + +cat ${upstream_problems} > ${problem_list} +distrel=`lsb_release --codename --short` +host_arch="${DEB_HOST_ARCH:-$(dpkg --print-architecture)}" + +grep -e ${host_arch} -e "arch-all" debian/tests/problems.csv | \ + grep -e ${distrel} -e "release-all" | \ + grep -e "@basename@" | \ + awk -F',|:' '{gsub(/ /, "", $2); print $2" 000000 generic-all" }' >> ${problem_list} diff --git a/tests/write-problems.sh b/tests/write-problems.sh new file mode 100755 index 000000000..7359eda76 --- /dev/null +++ b/tests/write-problems.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +problem_list=$1 +upstream_problems=$2 + +cat ${upstream_problems} > ${problem_list} +distrel=`lsb_release --codename --short` +host_arch="${DEB_HOST_ARCH:-$(dpkg --print-architecture)}" + +grep -e ${host_arch} -e "arch-all" debian/tests/problems.csv | \ + grep -e ${distrel} -e "release-all" | \ + grep -e "openjdk-25" | \ + awk -F',|:' '{gsub(/ /, "", $2); print $2" 000000 generic-all" }' >> ${problem_list} diff --git a/update-hgrev.sh b/update-hgrev.sh new file mode 100644 index 000000000..8df65cf0d --- /dev/null +++ b/update-hgrev.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +tarballs=(corba.tar.gz hotspot.tar.gz jaxp.tar.gz jaxws.tar.gz jdk-dfsg.tar.gz langtools-dfsg.tar.gz openjdk.tar.gz) +varhgchange=(CORBA_CHANGESET HOTSPOT_CHANGESET JAXP_CHANGESET JAXWS_CHANGESET JDK_CHANGESET LANGTOOLS_CHANGESET OPENJDK_CHANGESET) +tarballdir=. + +makefile1=Makefile.am + +function update_var() { + varname=$1 + newsum=$2 + + echo "$varname: ${newsum}" + if [ -f $makefile1 ]; then + sed -i "s/\(^$varname\)\(..*$\)/\1 = ${newsum}/" $makefile1 + fi +} + +function actual_tar_rev() { + tar=$1 + + revision=$(tar tf $tar | head -1 | sed 's,/.*,,' | sed 's,.*-,,') +} + +# For all modules +for (( i = 0 ; i < ${#varhgchange[@]} ; i++ )); do + actual_tar_rev $tarballdir/${tarballs[$i]} + update_var ${varhgchange[$i]} $revision +done diff --git a/update-shasum.sh b/update-shasum.sh new file mode 100644 index 000000000..af38b9247 --- /dev/null +++ b/update-shasum.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +tarballs=(jdk-dfsg.tar.gz langtools-dfsg.tar.gz) +varshasum=(JDK_SHA256SUM LANGTOOLS_SHA256SUM) +tarballdir=. + +makefile1=Makefile.am + +function update_var() { + varname=$1 + newsum=$2 + + echo "$varname: ${newsum}" + if [ -f $makefile1 ]; then + sed -i "s/\(^$varname\)\(..*$\)/\1 = ${newsum}/" $makefile1 + fi +} + +# For all modules +for (( i = 0 ; i < ${#tarballs[@]} ; i++ )); do + newsum=$(sha256sum $tarballdir/${tarballs[$i]} | cut -f 1 -d ' ') + update_var ${varshasum[$i]} $newsum +done diff --git a/watch b/watch new file mode 100644 index 000000000..504254713 --- /dev/null +++ b/watch @@ -0,0 +1,13 @@ +version=4 +opts=\ +repack,\ +compression=xz, \ + https://github.com/openjdk/jdk25u/tags \ + (?:.*?/)?jdk-(25[\+\.\d]*)\.tar\.gz + +opts=\ +component=googletest,\ +repack,\ +compression=xz \ + https://github.com/google/googletest/tags \ + (?:.*?/)?v(1.14.0)\.tar\.gz 1.14.0 diff --git a/watch.in b/watch.in new file mode 100644 index 000000000..032eae7ee --- /dev/null +++ b/watch.in @@ -0,0 +1,13 @@ +version=4 +opts=\ +repack,repacksuffix=ea,oversionmangle=s/\+(\d+)/\~$1/,dversionmangle=s/\~(\d*)ea$/\+$1/,\ +compression=xz, \ + @git_url@ \ + (?:.*?/)?jdk-(@shortver@[\+\.\d]*)\.tar\.gz + +opts=\ +component=googletest,\ +repack,\ +compression=xz \ + @gtest_repo@ \ + (?:.*?/)?v(@gtest_tag@)\.tar\.gz @gtest_tag@